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 //案例二:演示RaycastAll
22 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 }
此時你是不是想看到那個射線的軌跡?我們可以通過GL畫出來,但這里可以通過Debug.DrawLine()方法調試出來
注:這個軌跡只能在Scene視圖中看到,
我們改動下上面的代碼。在://案例一:演示Raycast,中改動如下:
if (Physics.Raycast(ray, out hit)) //如果命中,則改變為藍顏色
{
hit.transform.renderer.material.color = Color.blue;
Debug.DrawLine(ray.origin, hit.point); //畫軌跡
}
在Scene視圖中可以看出,當命中游戲對象后。看到了軌跡。
天空盒子(Skyboxes)
游戲場景中有沒有發現天空是晴朗的艷陽天,看著心情都舒服很多。這是unity自帶的包,操作如下:
1:導包
2:導入完成后可以在資源文件夾中看到
3:設置場景中的天空的渲染方式
兩種方式都可以設置:直接拖拽或者打開窗口選擇。
總結
以上是生活随笔為你收集整理的unity3d-射线(Ray)的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Physics.Raycast参数说明
- 下一篇: R数据挖掘 第四篇:OLS回归分析