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;
    }
相关推荐
新手unity自用笔记1 天前
unity基于Socket的网络学习
网络·网络协议·学习·unity·c#·游戏引擎
心前阳光1 天前
Unity之XR Interaction Toolkit | IPointerDownHandler问题
unity·游戏引擎·xr
帅_shuai_2 天前
unity 静态字段内存查找工具
unity·游戏引擎
郝学胜-神的一滴2 天前
[简化版 GAMES 104] 现代游戏引擎 06:从Tick时序到邮局模型,拆解确定性世界的底层密码
开发语言·c++·游戏引擎·图形渲染·软件开发·opengl
鹿野素材屋3 天前
Unity超轻量级中文语音播报,仅5兆大小,无需联网即可使用,适用于弹幕、提示等动态语音播出
unity·游戏引擎
电子云与长程纠缠4 天前
UE5 Lyra PocketWorld进行3D内容UI预览 - 上
开发语言·学习·3d·ue5·游戏引擎
玖玥拾4 天前
Unity3D RPG 入门项目(八)游戏设置面板、帧率控制、快捷技能药品栏、技能解锁系统
游戏·3d·unity·游戏引擎
ellis19704 天前
u3d插件xLua[十] lua侧判空问题
unity
牛哇网络工作室5 天前
UnityHDRP写实数字人全流程基础5—语音输入和语音识别
android·unity·c#·游戏引擎·aigc·语音识别·xcode
ellis19705 天前
u3d插件xLua[九]例8 Hotfix
unity