• Unity3D Layer要点


    简介

            Layer可以用于光照的分层和物理碰撞的分层,这样可以很好地进行性能优化

    数据结构

            Layer在Unity中有3中呈现方式:1、string名字,2、int层索引,3、LayerMask数据

           一般地,在编辑器中,我们设置GameObject的Layer,是直接使用的层的名字,比如Default、UI等等。

            而在代码中,使用的是GameObject的Layer属性,该属性是int型,取值在0到31之间,代表层索引,并且和名称一一对应。可以在Tags And Layers面板中设置对应关系(操作方法Editor->ProjectSetting->Tags And Layers)。

           另外,我们常常会使用到LayerMask结构定义字段,这样可以在编辑器中选择层。LayerMask的value属性虽然是一个int型,但是和GameObject的Layer属性不同。顾名思义LayerMask.value是一种Mask(通常用二进制表示),他的取值为1<<0到1<<31,即2^0到2^31(<<为二进制左移运算符,即1的二进制左移31位,所以结果为2^31)。另外一个LayerMask可以包含多个层,举个例子0x0001(1)表示1层,0x1001(9)表示第4层和第1层。

            要达到这样表示多个层的效果,需要使用|运算(|为二进制或运算,0|1=1,0|0=0,1|0=1,1|1=1,即有1则1),反过来要想判定一个LayerMask中是否有指定的Mask只要使用&运算(&为二进制且运算,0&1=0,1&0=0,1&1=1,0&0=0,即有0则0)判定运算的结果是否为这个Mask值即可。举个例子比如0x1001&0x1000=0x1000,所以可以判定0x1001的Mask值中包含了0x1000这个Mask值。

           上述了Unity的3种Layer的表示方法。在进行相互转化时可以使用Unity提供的LayerMask操作的相关方法,即LayerMask. NameToLayer(string layername),可以将一个名称转化为一个int型层索引,或者LayerMask. LayerToName(int layerindex)。而将int型转化为LayerMask,则需要做移位操作。或者使用LayerMsk.GetMask(param string[] name)方法将一组名称直接转成一个LayerMask

    常用方法

    • 将一个GameObject的layer转成LayerMask为

    1<<GameObject.Layer

    • 通过名称复合某二个层的操作为

    1<<LayerMask. NameToLayer(“layer1”)| 1<<LayerMask. NameToLayer(“layer2”)

              或者

    LayerMask.GetMask(“layer1”,”layer2”)

    • 判定一个GameObject是否在LayerMask中

    Return (layermask&1<<GameObject.Layer)==1<< GameObject.Layer

             或者

    Return (layermask&1<<GameObject.Layer)!=0

    • 判定一个GameObject是否在某一个名称(比如“layer”)的层上

    Return GameObject.Layer== LayerMask. NameToLayer(“layer”)

    个人博客请访问:http://www.cnblogs.com/CodeGize/
  • 相关阅读:
    LeetCode15 3Sum
    LeetCode10 Regular Expression Matching
    LeetCode20 Valid Parentheses
    LeetCode21 Merge Two Sorted Lists
    LeetCode13 Roman to Integer
    LeetCode12 Integer to Roman
    LeetCode11 Container With Most Water
    LeetCode19 Remove Nth Node From End of List
    LeetCode14 Longest Common Prefix
    LeetCode9 Palindrome Number
  • 原文地址:https://www.cnblogs.com/CodeGize/p/5518881.html
Copyright © 2020-2023  润新知