层 Layer 有 32 个 id 从[0,31]
一个 gameobject 一定属于一个层,写为 go.layer = LayerMask.NametoLayer("Scene")
而一些函数,例如射线测试,需要传入一系列层的组合掩码,也就是多个层的组合,这个组合就通过
1 << LayerMask.NameToLayer("Scene") | 1 << LayerMask.NameToLayer("Water")
1 << LayerMask.NameToLayer("Default")
稍微解释一下这句话
层 Default 是 Unity 里默认的层,他的 Layer 编号为 0,用 LayerMask.NameToLayer("Default")得到的结果也是 0
那么
1 << LayerMask.NameToLayer("Default") 等同于 1 << 0
也就是让 1 左移 0 位,得到 1
同理,任意一个层,把层编号算出来,让 1 左移这个编号数字那么多位,就会把 1 放置在一个 32 位数字的某一位上
而二个层之间通过 | 来位或运算,则得到最后的结果就是一个 32 位数
这个 32 位数字哪一位是 1,就代表选择了对应位的那一层
这本来是一个很简单的东西,可是经常把独立赋值,和层的组合弄混了,还是对 Unity 很多地方模棱两可不求甚解导致的。
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于