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;
    }
相关推荐
平行云PVT10 小时前
数字孪生信创云渲染技术解析:从混合信创到全国产化架构
linux·unity·云原生·ue5·图形渲染·webgl·gpu算力
小小数媒成员16 小时前
Unity的包含文件
unity·游戏引擎
mxwin18 小时前
Unity Shader 实战屏幕颜色抓取实现径向模糊 (URP)
unity·游戏引擎·shader·uv
林枫依依1 天前
Unity2017 项目源码打开即崩溃,无法打开的解决办法
unity
wearegogog1231 天前
ESP32迷你无人机开发代码详解
游戏引擎·无人机·cocos2d
心前阳光1 天前
Unity使用豆包语音模型
unity·游戏引擎
张老师带你学1 天前
unity资源:星际飞船 陨石 虫族 星球
科技·游戏·unity·模型·游戏美术
心前阳光1 天前
Unity使用豆包语言模型
unity·语言模型
魔士于安1 天前
unity宇宙飞船
游戏·unity·游戏引擎·贴图·模型
RReality1 天前
【Unity Shader】高级光照与阴影总结:渲染路径、多光源、透明阴影
unity·游戏引擎