首先,射線檢測的API是這樣的,網上找了一下,這個圖片看得很清楚:
接下來是自己使用這個進行測試
using System.Collections; using System.Collections.Generic; using UnityEngine; //基本語法:public Ray ScreenPointToRay(Vector3 position); //其中參數position為屏幕位置參考點。 //功能說明:此方法的作用是可以從Camera的近視口nearClip向前發射一條射線到屏幕上的position點。 //參考點position用實際像素值的方式來決定Ray到屏幕的位置。 //參考點position的X軸分量或Y軸分量從0增長到最大值時,Ray從屏幕一邊移動到另一邊。 //當Ray未能碰撞到物體時hit.point返回值為Vector3(0,0,0)。參考點position的Z軸分量值無效。 public class PlayerMouseHit : MonoBehaviour { Ray camerRay; //聲明一個射線 Vector3 mousePos = new Vector3(); //記錄將鼠標(因為屏幕坐標沒有z,所以下面是將z設為0) RaycastHit cameraHit; //用於記錄射線碰撞到的物體 void Start() { } void Update() { if (Input.GetMouseButtonDown(0)) //思路:當點擊鼠標左鍵的時候,以鼠標在攝像機屏幕位置發射一個射線進行檢測 { //這里將屏幕坐標的鼠標位置存入一個vector3里面 mousePos.x = Input.mousePosition.x; mousePos.y = Input.mousePosition.y; mousePos.z = 0; //Ray ray=Camera.main.ScreenPointToRay(Vector3 Pos):返回一條射線由攝像機近裁面發射經過Pos的射線。 camerRay = Camera.main.ScreenPointToRay(mousePos); //public static bool Raycast(Ray ray, RaycastHit hitInfo, float distance, int layerMask); //物理檢測射線,out一個RaycastHit類型的 hitInfo 信息,float distance是射線長度,int layerMask需要轉換二進制,所以有如下操作 if (Physics.Raycast(camerRay, out cameraHit, 10, 1 << LayerMask.NameToLayer("Monster"))) { GameObject go = cameraHit.transform.gameObject; //這是檢測到的物體 } } } }