射線檢測的坑
有時侯我們想在射線檢測的時候忽略掉某些物體的碰撞,從而達到檢測物體背后的物體的碰撞,這是個時候我們使用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時,返回的是父物體名字
其它以后會慢慢補充