Unity的學習筆記(射線檢測)


首先,射線檢測的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; //這是檢測到的物體
            }
        }
    }
}

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM