1. Layer
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 层代码为:5byte 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));