LayerMask的存储
LayerMask的每一个层级都是一个二进制数字
实际上LayerMash是32位的二进制记录的,每一个层级对应一个二进制位置,所以理论上Unity最多能有32个层级关系,为了方便解释以下列表假设只有5位二进制数据
层级 | 二进制 | 十进制 |
---|---|---|
Everything | 11111 | -1 |
Nothing | 00000 | 0 |
第零层 | 00001 | 1 |
第一层 | 00010 | 2 |
第二层 | 00100 | 4 |
第三层 | 01000 | 8 |
第四层 | 10000 | 16 |
层级 | 二进制 | 十进制 |
---|---|---|
第三四层 | 11000 | 24 |
第一二三四层 | 11110 | 30 |
代码控制
(1<<n) 左移1在二进制数据的位置,从0号位置开始移动,返回的是一个二进制数据
例如(1<<4) = 1000
运算符号
&= 两个二进制数据右侧对齐,缺位补0,当且仅当两个数据都为1时对应位才为1
|= 两个二进制数据右侧对齐,缺位补0,只要两个数据中有一个为1则为1
代码格式
layerMask &=[|=] (1<<n);
以此来控制层级的增加或者剔除