Unity中是用int来表示LayerMask,int类型二进制32位,表示32(0-31)个Layer层。
在Unity编辑器中的Layer如下图所示:
在Unity中每个GameObject都有Layer属性,默认的Layer都是Default。其中0-7层,官方默认不可编辑,
剩下的24个(8—31层)可自行定义。
Unity的layer层级类LayerMask实际上是一个位码操作,现有层级的获得代码如下:
int layer = LayerMask.NameToLayer("Fish"); //如上图layer值是8
//射线检测如下
int layerMask = 1 << 8;
// Does the ray intersect any objects which are in the player layer.
if (Physics.Raycast(transform.position, Vector3.forward, Mathf.Infinity, layerMask))
{
Debug.Log("The ray hit the player");
}
开启某个Layers代码如下:
LayerMask mask = 1 << 8; //表示开启Layer8。
LayerMask mask = 0 << 8; //表示关闭Layer8。
LayerMask mask = 1<<8|1<<9; //表示开启Layer8和Layer9。
LayerMask mask = 0<<8|1<<9; //表示关闭Layer8和开启Layer9。
LayerMask mask = ~(1<<8); //表示关闭Layer8。