Unity射線檢測的坑


射線檢測的坑

有時侯我們想在射線檢測的時候忽略掉某些物體的碰撞,從而達到檢測物體背后的物體的碰撞,這是個時候我們使用layerMask

layerMask參數使用按位與<<設置的一些總結:

  1 << 10 打開第10的層。
~(1 << 10) 打開除了第10之外的層。
~(1 << 0) 打開所有的層。
(1 << 10) | (1 << 8) 打開第10和第8的層。

 Debug.DrawLine(ray.origin, hitInfoPoint.point, Color.red);// 加上這句可以在Scene視窗看到射線

先寫一下射線的應用

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Global;
public class ShiYan : MonoBehaviour {
    Ray ray;
    RaycastHit hitInfoPoint;
 
    void Update () {
      
        if (Input .GetMouseButtonUp (0))
        {
            ray = Camera.main.ScreenPointToRay(Input.mousePosition);
            LayerMask layer = 1 << 10;     //層級 就是打開第10層
            //下面如果不判斷,並且你的場景中沒有其他的碰撞體,就會報錯,為了防止報錯加個判斷if
            if (Physics.Raycast(ray, out hitInfoPoint, 100f, layer))
            {
                Debug.Log(hitInfoPoint.transform.name);
            }
                                                           
        }     
    }
}

最大的坑就是如果你設置了層級,射線里面不設置射線的長度(maxDistance),那么就會出現射線設置的層級不起作用

切記設置了層級,一定設置長度

 

當父子物體都有碰撞器時,如需檢測子物體,需將父物體層級關閉,或只打開子物體層級

但如需獲取子物體信息時,需用hit.collider.name(名字),

如用hit.transform.name時,返回的是父物體名字

 

其它以后會慢慢補充

 


免責聲明!

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



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