C語言中文網 目錄

Unity 3D射線

射線是三維世界中一個點向一個方向發射的一條無終點的線,在發射軌跡中與其他物體發生碰撞時,它將停止發射。

射線應用范圍比較廣,廣泛應用于路徑搜尋、AI邏輯和命令判斷中。

例如,自動巡邏的敵人在視野前方發現玩家的時候會向玩家發起攻擊,這時候就需要使用射線了。

接下來我們通過一個案例來了解射線在游戲開發中的應用。

實踐案例:拾取物體

案例構思

本案例旨在通過在場景中拾取 Cube 對象,實現射線功能。

案例設計

本案例在 Unity 3D 內創建一個簡單的三維場景,場景內放有 Cube 和 Plane,Plane 用于充當地面,Cube 用于做拾取物體測試。

當單擊 Cube 時,它會發出一條射線,同時在 Console 面板中出現pick up字樣。

案例實施

步驟 1):創建一個平面(0,0,0)和一個小球(0,1,0),使小球置于平面上方,如下圖所示。

創建三維場景

步驟 2):創建 C# 腳本,將其命名為 RayTest,輸入如下代碼。
using UnityEngine;
using System.Collections;
public class RayTest:MonoBehaviour{
    void Update(){
        if(Input.GetMouseButton(0)){
            //從攝像機到單擊處發出射線
            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);
                //當射線碰撞目標的標簽是Pickup時, 執行拾取操作
                if(gameObj.tag=="Pickup"){
                    Debug.Log("pick up!");
                }
            }
        }
    }
}
上述代碼中,首先創建一個 Ray 對象,從攝像機發出到單擊處的射線。

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

步驟 3):將腳本鏈接到主攝像機上。

步驟 4):為 Cube 添加 Pickup 標簽。

步驟 5):運行測試,效果如下圖所示。

射線測試效果圖

精美而實用的網站,提供C語言C++STLLinuxShellJavaGo語言等教程,以及socketGCCviSwing設計模式JSP等專題。

Copyright ?2011-2018 biancheng.net, 陜ICP備15000209號

底部Logo