射线检测我们经常使用,可以得到射线碰撞检测到的信息。
Physics.Raycast(Ray ray, out RaycastHit hitinfo, float maxDistance)
但如果有些物体并不需要被射线检测,但它显示在需要被射线检测物体之前,并且还拥有碰撞体,会导致射线检测无法达到我们预期的效果。
我们就需要用到他的第四个参数layerMask。
Physics.Raycast(Ray ray, out RaycastHit hitinfo, float maxDistance,
int layerMask)
layerMask用于设置可以被射线检测的层级。
使用方法
int layerMask = 1 << 1; //表示允许检测第一层Layer。 layerMask += 1 << 2 ; //增加允许检测第二层Layer。 layerMask |= 1 << 3 ; //增加允许检测第三层Layer。 layerMask |= 1 << LayerMask.NameToLayer("Cube"); //增加允许检测名为“Cube”的层级。
增加层级使用 | 或者 + 都可以。标号数字可以直接使用数字,也可以通过LayerMask.NameToLayer来获取。
也可以使用**~**进行取反。
完整代码:
layerMask = ~LayerMask; //取反,表示允许检测除1、2、3的其它层级。
int layerMask; void Start() { layerMask = 1 << 1; //表示允许检测第一层Layer。 layerMask += 1 << 2 ; //增加允许检测第二层Layer。 layerMask |= 1 << 3 ; //增加允许检测第三层Layer。 layerMask = ~LayerMask; //取反,表示允许检测除1、2、3的其它层级。 } void Update () { if (Input.GetMouseButtonDown(0)) { Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition); RaycastHit hit; //可以检测到除1、2、3的其它层级 if (Physics.Raycast(ray, out hit, 10000, layerMask) { } } }