日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

unity3d-射线(Ray)

發布時間:2023/12/13 综合教程 26 生活家
生活随笔 收集整理的這篇文章主要介紹了 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)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。