射线检测我们经常使用,可以得到射线碰撞检测到的信息。
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)
{
}
}
}