W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
射線是三維世界中一個(gè)點(diǎn)向一個(gè)方向發(fā)射的一條無終點(diǎn)的線,在發(fā)射軌跡中與其他物體發(fā)生碰撞時(shí),它將停止發(fā)射。
射線應(yīng)用范圍比較廣,廣泛應(yīng)用于
例如,自動(dòng)巡邏的敵人在視野前方發(fā)現(xiàn)玩家的時(shí)候會(huì)向玩家發(fā)起攻擊,這時(shí)候就需要使用射線了。
接下來我們通過一個(gè)案例來了解射線在游戲開發(fā)中的應(yīng)用。
案例設(shè)計(jì)
在 Unity 3D 內(nèi)創(chuàng)建一個(gè)簡單的三維場景,場景內(nèi)放有 Cube
和 Plane
,Plane
用于充當(dāng)?shù)孛妫?code>Cube 用于做拾取物體測(cè)試。
當(dāng)單擊 Cube
時(shí),它會(huì)發(fā)出一條射線,同時(shí)在 Console
面板中出現(xiàn) pick up
字樣。
案例實(shí)施
RayTest
。 using UnityEngine;
using System.Collections;
public class RayTest:MonoBehaviour{
void Update(){
if(Input.GetMouseButton(0)){
//從攝像機(jī)到單擊處發(fā)出射線
Ray ray=Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit hitInfo;
if(Physics.Raycast(ray, out hitInfo)){
//畫出射線, 只有在Scene視圖中才能看到
Debug.DrawLine(ray.origin, hitInfo.point);
GameObject gameObj=hitInfo.collider.gameObject;
Debug.Log("click object name is"+gameObj.name);
//當(dāng)射線碰撞目標(biāo)的標(biāo)簽是Pickup時(shí), 執(zhí)行拾取操作
if(gameObj.tag=="Pickup"){
Debug.Log("pick up!");
}
}
}
}
}
首先創(chuàng)建一個(gè) Ray 對(duì)象
,從攝像機(jī)發(fā)出到單擊處的射線。
Debug.DrawLine 函數(shù)
將射線可視化。接下來進(jìn)行判斷,如果鼠標(biāo)單擊的物體標(biāo)簽是 Pickup
,則在控制面板中輸出 pick up
字樣。
Cube
添加 Pickup 標(biāo)簽
。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: