Unity 3D 射線

2020-07-17 17:52 更新

射線是三維世界中一個(gè)點(diǎn)向一個(gè)方向發(fā)射的一條無終點(diǎn)的線,在發(fā)射軌跡中與其他物體發(fā)生碰撞時(shí),它將停止發(fā)射。

射線應(yīng)用范圍比較廣,廣泛應(yīng)用于

  • 路徑搜尋。

  • AI邏輯。

  • 命令判斷。

例如,自動(dòng)巡邏的敵人在視野前方發(fā)現(xiàn)玩家的時(shí)候會(huì)向玩家發(fā)起攻擊,這時(shí)候就需要使用射線了。

接下來我們通過一個(gè)案例來了解射線在游戲開發(fā)中的應(yīng)用。

案例設(shè)計(jì)

在 Unity 3D 內(nèi)創(chuàng)建一個(gè)簡單的三維場景,場景內(nèi)放有 CubePlane,Plane 用于充當(dāng)?shù)孛妫?code>Cube 用于做拾取物體測試。

當(dāng)單擊 Cube 時(shí),它會(huì)發(fā)出一條射線,同時(shí)在 Console 面板中出現(xiàn) pick up 字樣。

案例實(shí)施

  1. 創(chuàng)建一個(gè)平面(0,0,0)和一個(gè)小球(0,1,0),使小球置于平面上方。

  1. 創(chuàng)建 C# 腳本,將其命名為 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 對象,從攝像機(jī)發(fā)出到單擊處的射線。

Debug.DrawLine 函數(shù)將射線可視化。接下來進(jìn)行判斷,如果鼠標(biāo)單擊的物體標(biāo)簽是 Pickup,則在控制面板中輸出 pick up 字樣。

  1. 將腳本鏈接到主攝像機(jī)上。

  1. Cube 添加 Pickup 標(biāo)簽。

  1. 運(yùn)行測試。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號