unity3d-射线(Ray)
射線(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)題。
- 上一篇: Physics.Raycast参数说明
- 下一篇: R数据挖掘 第四篇:OLS回归分析