Unity layer的介绍与使用以及只有32层的原因

本文详细介绍了Unity中Layer层的两种开启方式、使用面板、碰撞矩阵检测以及如何通过代码控制相机的照射层。讲解了Layer层的32个位值表示法,并给出了添加和删除照射层的代码示例,强调了使用枚举提高代码可读性的方法。
摘要由CSDN通过智能技术生成

先说说打开layer层窗口的两种方式

1.

2.

 

 打开之后我们能看到如下面板

 

红框框住的0—7层已经被官方占用

绿框框住的我们可以自由使用

 接着看一下Layer层碰撞矩阵的检测

这是碰撞矩阵的检测 不勾选的话这两种layer层的物体将不会再有碰撞

 外部文件位置

 相应的配置我们已经熟悉

下面熟悉一下原理和使用

 我们首先要明确layer一共有32个一旦用完将无法再添加
 unity中用int32表示32个layer层 所以layer一旦用完是没法添加的

 因为32个layer用int32表示 所以32个layer的值应该分别是
        0层         1层         2层       3层        4层       5层          6层           7层         8层           ......
          1,         2,        4,        8,      16,     32,         64,       128,      256           ......
   即:1<<0,        1<<1,     1<<2,     1<<3,   1<<4,    1<<5,        1<<6,     1<<7,       1<<8          ......
          1         10       100         1000    10000   100000   1000000   10000000    100000000       ......

    取反:(等下用代码动态删除的时候可以用到)
      ~1     ~2   ~4    ~8     ~16       ~32         ~64           ~128         ~256            ......
      0       01   011   0111  01111   011111   0111111   01111111    011111111       ......

从代码控制相机添加照射层为
     m_camera.cullingMask |= layerMask;
    比如现在有一个相机照射第一二层 此时想让它照射第三层就应该

     m_camera.cullingMask |= 1<<3
    此时m_camera.cullingMask= 1<<1|1<<2|1<<3 = 10|100|1000 = 1110;

从代码控制相机删除照射层为

m_camera.cullingMask &= ~layerMask
如果我们此时不想让他照射第二层了就应该

m_camera.cullingMask &= ~4  4是100取反是011
此时m_camera.cullingMask= 1110&011 = 1010 = 10|1000

此时照射的是第一层和第三层就把第二层剔除了

当然直接使用数字在代码不但不好看 而且难懂 对此我们可以使用枚举的方式定义一下不同的layer层
例如:

public enum EM_CONST_LAYER {
    GROUND = 1 << 8,
    PLAYER = 1 << 9,
    BOX = 1 << 10,
}

使用:

public void AddOrSubLayerToCamera(EM_CONST_LAYER m_CONST_LAYER, bool isAdd = true) {
        if(isAdd)
            m_camera.cullingMask |= (int)m_CONST_LAYER;
        else
            m_camera.cullingMask &= ~(int)m_CONST_LAYER;
    }

  • 2
    点赞
  • 7
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

一梭键盘任平生

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值