首页 > 代码库 > unity3d-射线(Ray)

unity3d-射线(Ray)

射线Ray

射线是一个点向另外一个点发生的一条线,一旦与其他模型发生碰撞,他将停止发射。注意这条件是逻辑上的,界面上看不到。

一般使用射线判断是否发射至某个游戏对象上或者获得鼠标点击的游戏对象等。

用Camera.main.ScreenPointToRay向屏幕发射一条射线。

 

1     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);2     RaycastHit hit;3    if(Physics.Raycast(ray,out hit)//如果命中4     {5      //hit.collider.gameObject可以获得命中的游戏对象6     }

 

 

Raycast和RaycastAll的区别

Raycast:一旦与其他模型发生碰撞,他将停止发射。

RaycastAll:投射一条光线并返回所有碰撞

我们来做个小案例演示下。这个两个的区别。我分别模拟鼠标左键和右键单击并发射射线,

1:Raycast碰撞的物体。设置为蓝色

1:RaycastAll碰撞的所有物体。设置为红色

技术分享

从上图可以看出来。当右键单击。射线穿过了两个cube,都变成了红色。 可以在scene中可以看到效果,而左键单击变成了蓝色。

 

 1 void Update() 2     { 3  4         if (Input.GetMouseButtonDown(0)) //单击鼠标左键 5         { 6             //案例一:演示Raycast, 7             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); 8             RaycastHit hit; 9             if (Physics.Raycast(ray, out hit)) //如果命中,则改变为蓝颜色10             {11                 hit.transform.renderer.material.color = Color.blue;12                 //hit.collider.gameObject.transform.renderer.material.color = Color.red;13             }14 15 16         }17 18         if (Input.GetMouseButtonDown(1))//单击鼠标右键19         {20             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);21             //案例二:演示RaycastAll22             RaycastHit[] hi = Physics.RaycastAll(ray);23             if (hi.Length > 0)24             {25                 for (int i = 0; i < hi.Length; i++) //改变所有命中对象的为红颜色26                 {27                     hi[i].collider.transform.renderer.material.color = Color.red;28                 }29             }30         }31     }

 

天空盒子(Skyboxes)

游戏场景中有没有发现天空是晴朗的艳阳天,看着心情都舒服很多。这是unity自带的包,操作如下:

1:导包

 

技术分享

 

2:导入完成后可以在资源文件夹中看到

技术分享

3:设置场景中的天空的渲染方式

技术分享

两种方式都可以设置:直接拖拽或者打开窗口选择。

技术分享

unity3d-射线(Ray)