流星   安卓版

流星蝴蝶剑 1.07/9.07 手机版 安卓版

Unity的LayerMask

    层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很多地方模棱两可不求甚解导致的。

    validate