在使用Unity的RayCast 或者BoxCast SphereCast等函数的时候 他里面传入的layerMask参数不是简单的使用LayerMask.NameToLayer转化后直接传入的,而是还需要经过位运算。这和一些其他使用layer的情况不一样
Layer的文档
在官文里面有明确说明,但是在API文档里面没有说明,所以使用layer的人可能会踩坑
public static int GetRealLayer(string layerName)
{
int bitCount = LayerMask.NameToLayer(layerName);
int realLayer = 1 << bitCount;//在二进制里面将1左移几位 表示1乘以2的几次方
return realLayer;
}
在上述函数里面进行位移操作
- 如果XXCast里面没有传入layer参数,默认所有层都会接受检测
- 如果传入的是GetRealLayer(“Default”),则在Default层进行检测
- 如果传入的是~GetRealLayer(“Default”),则在除了Default层的其他层进行检测
Collider.RayCast 也需要注意,如果这个射线是从 的Collider内部发射出的 则即使与这个collider相交
也会造成不会检测到