Unity LayerMask原理和判断包含关系

在本文之前,请先了解全部位操作的含义,否则继续下去会很困难。

本质:32位整数的每一位表示一个层

LayerMask本质上是一个32位的整数(Int32 ,int),每个位代表一个图层,因此LayerMask最多可以表示32个图层(0到31)

LayerMask使用位操作来管理和检测包含在其中的图层,例如,如果游戏对象属于第0层和第2层,那么对应的LayerMask值就是:1 << 0 | 1 << 2 = 5

00000000000000000000000000000001 =1 (下文简称A)

00000000000000000000000000000100 =4 (下文简称B)

结果是

00000000000000000000000000000101 = 5 (下文简称C)

可以看到1层和3层是打开了的,第1和3位都是1

相同的,如果A&B,

得到结果

00000000000000000000000000000101 & (1<<2)

= 00000000000000000000000000000100

LayerMask & (1 << value) 如果结果不为0,则表示这个LayerMask值包含第value层

如果需要合并两个Layermask,只需要 Mask1 | Mask2 = Merged LayerMask

csharp 复制代码
    [DebuggerHidden]
    public static bool IsInLayerMask(GameObject obj, LayerMask layerMask)
    {
        // 根据Layer数值进行移位获得用于运算的Mask值
        int objLayerMask = 1 << obj.layer;
        return (layerMask.value & objLayerMask) > 0;
    }

    [DebuggerHidden]
    public static bool IsInLayerMask(LayerMask testMask, LayerMask layerMask)
    {
        // 根据Layer数值进行移位获得用于运算的Mask值
        int objLayerMask = 1 << testMask;
        return (layerMask.value & objLayerMask) > 0;
    }
相关推荐
!chen5 小时前
Unity颜色曲线ColorCurves
unity·游戏引擎
B0URNE5 小时前
【Unity基础详解】(4)Unity核心类:MonoBehaviour
unity·游戏引擎
AA陈超10 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-29 属性信息委托
c++·游戏·ue5·游戏引擎·虚幻
AA陈超12 小时前
虚幻引擎5 GAS开发俯视角RPG游戏 P06-31 映射标签到属性
c++·游戏·ue5·游戏引擎·虚幻
gshh__12 小时前
SuperMap Hi-Fi 3D SDK for Unreal 使用蓝图接口加载多源数据
ue5·游戏引擎·supermap
小时候的阳光12 小时前
Cocos Creator 和 Unity 3D 编辑界面字体样式大小调整
unity·cocos2d·字体大小
ellis197012 小时前
Lua代码混淆-Prometheus方案教程
unity·lua
EQ-雪梨蛋花汤14 小时前
【MRTK3踩坑记录】Unity 2022 中 MRTK3 Input Simulator 无法使用 WASD 控制相机的完整排查记录
数码相机·unity·游戏引擎
星夜泊客1 天前
Unity 游戏开发中的防御性编程与空值处理实践
unity·设计模式·游戏引擎
mit6.8241 天前
[无人机sdk] Open Protocol | 协议包构造&验证
游戏引擎·无人机·cocos2d