Unity中为什么要使用LayerMask

个人理解:

使用Layermask的好处:首先,layerMask是一个32位的掩码,32位掩码一个32位二进制数,每一位表示一个状态,对于layerMask这个状态就表示某一层的打开关闭状态,0表示关闭,1表示打开。

那么,为什么要使用掩码不直接使用十进制数呢?对于一个十进制整数,可以使用字典的方式存储状态,< 层数, 状态 > 比如要表示第8层的打开关闭状态,可能的函数就是传入一个整数8,然后在函数内设置字典

state[ 8 ] = true。那么要设置从第8层到第15层都打开,可能的代码就是

for( int i=8; i<=15; ++i ){

    state[ i ] = true;

}

如果设置除了第8层,第15层,其它都关闭,那么就要调用复杂一点的函数。

从以上分析可以看出直接使用字典的方式存储每一层的状态设置起来比较繁琐。

而使用掩码,可以直接使用位操作设置,不需要调用任何复杂的函数。

比如:

设置第8层关闭

Camera.main.cullingMask &= ~(1<<8)。

这里直接使用与操作,对于与操作,0与数A结果为0,1与数A结果为数A,

对于第8层, 这里layerMask类中的32位值 = 0000 0000 0000 0000 0000 0001 0000 0000,

取反后为 1111 1111 1111 1111 1111 1110 1111 1111

将另一个这样二进制数与上面的32位二进制数与运算很明显被改变的只有第8层,因此只关闭第8层,其余层不改变状态。

如果直接设置Camera.main.cullingMask = 1111 1111 1111 1111 1111 1110 1111 1111显然这表示打开除了第8层以外的所有层。(0表示关闭状态,1表示打开状态)

 

如果要打开第8层:

使用或运算,1或A为1, 0或A为A

Camera.main.cullingMask |= (1<<8)。

 

如果事先不知道第8层的状态:

如果事先不知道第8层的状态,而仅仅是希望点击按钮就改变原先的状态,那么可以使用异或运算,(相异为1,相同为0)。

Camera.main.cullingMask ^= (1<<8)。参考上面的解释很容易理解.

参考:https://blog.csdn.net/qq_34562355/article/details/91876362

  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值