layer本质是按序左移的一个Int32数字,int32有4个字节=》32位,故可以支持32个层级。系统自身使用了5个层,意味着用户还有27个层可以使用。
0000 0000 0000 0000 0000 0000 0000 0000
可以且只能任意位为1。
unity具体的0-31的层级分布可能是从头开始,也可能是从尾开始,对开发者来说没有区别
LayerMask.NameToLayer()
LayerMask.NameToLayer(“Default”),意味着Unity会通过名字比较取到对应的层级返回,返回的数字是这个的层的对应位数字。比如第12位就返回12.
LayerMask.LayerToName
将对应层的数字位数传入进行比较得到对应层的名称
LayerMask.GetMask
此api比较特殊,传入的是多个层的名称,返回的不是位数。可以理解位一个int32.MaxValue的数,与多个层的数字进行位并,得出的一个数字。过程如下(使用8位进行演示)
//A 0000 0010 层代码为:1
//B 0000 1000 层代码为:3
//C 0010 0000 层代码为:5
byte mask= LayerMask.GetMask("A","B"); //mask => 0010 1010
//比较 //新层
byte newMaskCode= 16;
if((newMaskCode & mask )>0){
Debug.Log("新层存在");
}else{
Debug.Log("新层不存在");
}
Debug.Log("新层名称为:"+LayerMask.LayerToName(newMaskCode));