查看: 1137|回复: 2
打印 上一主题 下一主题

[其他] LayerMask 在 Unity3d 脚本中的开关方法

[复制链接]

2317

主题

54

听众

2万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
20645
精华
62

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

跳转到指定楼层
楼主
发表于 2014-10-31 15:44:57 |只看该作者 |倒序浏览
在操作 LayerMask 时常令一些初学者摸不着头脑下面简单说一下层的开关方法:

1.首先引入'|'、'&'、'~'的概念
与(交集):10000001 & 10000100 == 10000000

或(并集):10000001 | 10000100 == 10000101

非(反转):10000001 == ~01111110

2.int myLayerMask = 1 << curLayer;
等式右侧 curLayer 代表Inspector/Layer中的某一层
等号左侧是通过一个数来保存多个层的信息
他是怎么做到的呢?
其实是用 myLayerMask = 00000000 方式来保存的
myLayerMask = 1 << 3 ---> myLayerMask == 00001000
这时层级中的第3层被开启,其余层处于关闭状态
另外,需注意的是,层的序号是从0开始计算的
因此,上面的操作相当于使用二进制方法进行一对多表现方式的转化过程

3.实例讲解
有了上面铺垫,我们就可以轻松的对多个Layer进行开关了
1)开启1、2层
camera.cullingMask = (1 << 1) | (1 << 2);
2)开启除2层外的所有层
camera.cullingMask = ~(1 << 2);
3)开启除1、2、4层外的所有层
camera.cullingMask = ~((1 << 1) | (1 << 2) | (1 << 4));
分享到: QQ好友和群QQ好友和群 腾讯微博腾讯微博 腾讯朋友腾讯朋友 微信微信
转播转播0 分享淘帖0 收藏收藏0 支持支持0 反对反对0
回复

使用道具 举报

115

主题

3

听众

5676

积分

高级设计师

Rank: 6Rank: 6

纳金币
7268
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

沙发
发表于 2014-10-31 17:40:43 |只看该作者
Wow, thanks for sharing this one !
回复

使用道具 举报

16

主题

1

听众

1万

积分

资深设计师

Rank: 7Rank: 7Rank: 7

纳金币
3
精华
0

最佳新人 活跃会员 热心会员 灌水之王 突出贡献

板凳
发表于 2014-10-31 20:28:22 |只看该作者
比较搞,学习了
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

关闭

站长推荐上一条 /1 下一条

手机版|纳金网 ( 闽ICP备08008928号

GMT+8, 2024-5-4 05:20 , Processed in 0.086361 second(s), 32 queries .

Powered by Discuz!-创意设计 X2.5

© 2008-2019 Narkii Inc.

回顶部