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

歡迎訪(fǎng)問(wèn) 生活随笔!

生活随笔

當(dāng)前位置: 首頁(yè) > 编程资源 > 综合教程 >内容正文

综合教程

unity3d-射线(Ray)

發(fā)布時(shí)間:2023/12/13 综合教程 35 生活家
生活随笔 收集整理的這篇文章主要介紹了 unity3d-射线(Ray) 小編覺(jué)得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

射線(xiàn)Ray

射線(xiàn)是一個(gè)點(diǎn)向另外一個(gè)點(diǎn)發(fā)生的一條線(xiàn),一旦與其他模型發(fā)生碰撞,他將停止發(fā)射。注意這條件是邏輯上的,界面上看不到。

一般使用射線(xiàn)判斷是否發(fā)射至某個(gè)游戲?qū)ο笊匣蛘攉@得鼠標(biāo)點(diǎn)擊的游戲?qū)ο蟮取?/p>

用Camera.main.ScreenPointToRay向屏幕發(fā)射一條射線(xiàn)。

1     Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
2     RaycastHit hit;
3    if(Physics.Raycast(ray,out hit)//如果命中
4     {
5      //hit.collider.gameObject可以獲得命中的游戲?qū)ο?6     }

Raycast和RaycastAll的區(qū)別

Raycast:一旦與其他模型發(fā)生碰撞,他將停止發(fā)射。

RaycastAll:投射一條光線(xiàn)并返回所有碰撞

我們來(lái)做個(gè)小案例演示下。這個(gè)兩個(gè)的區(qū)別。我分別模擬鼠標(biāo)左鍵和右鍵單擊并發(fā)射射線(xiàn),

1:Raycast碰撞的物體。設(shè)置為藍(lán)色

1:RaycastAll碰撞的所有物體。設(shè)置為紅色

從上圖可以看出來(lái)。當(dāng)右鍵單擊。射線(xiàn)穿過(guò)了兩個(gè)cube,都變成了紅色。 可以在scene中可以看到效果,而左鍵單擊變成了藍(lán)色。

 1 void Update()
 2     {
 3 
 4         if (Input.GetMouseButtonDown(0)) //單擊鼠標(biāo)左鍵
 5         {
 6             //案例一:演示Raycast,
 7             Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
 8             RaycastHit hit;
 9             if (Physics.Raycast(ray, out hit)) //如果命中,則改變?yōu)樗{(lán)顏色
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))//單擊鼠標(biāo)右鍵
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++) //改變所有命中對(duì)象的為紅顏色
26                 {
27                     hi[i].collider.transform.renderer.material.color = Color.red;
28                 }
29             }
30         }
31     }

此時(shí)你是不是想看到那個(gè)射線(xiàn)的軌跡?我們可以通過(guò)GL畫(huà)出來(lái),但這里可以通過(guò)Debug.DrawLine()方法調(diào)試出來(lái)

注:這個(gè)軌跡只能在Scene視圖中看到,

我們改動(dòng)下上面的代碼。在://案例一:演示Raycast,中改動(dòng)如下:

if (Physics.Raycast(ray, out hit)) //如果命中,則改變?yōu)樗{(lán)顏色
             {
                 hit.transform.renderer.material.color = Color.blue;
                 
Debug.DrawLine(ray.origin, hit.point); //畫(huà)軌跡
             }

在Scene視圖中可以看出,當(dāng)命中游戲?qū)ο蠛蟆?吹搅塑壽E。

天空盒子(Skyboxes)

游戲場(chǎng)景中有沒(méi)有發(fā)現(xiàn)天空是晴朗的艷陽(yáng)天,看著心情都舒服很多。這是unity自帶的包,操作如下:

1:導(dǎo)包

2:導(dǎo)入完成后可以在資源文件夾中看到

3:設(shè)置場(chǎng)景中的天空的渲染方式

兩種方式都可以設(shè)置:直接拖拽或者打開(kāi)窗口選擇。

總結(jié)

以上是生活随笔為你收集整理的unity3d-射线(Ray)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。

如果覺(jué)得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。