在本文之前,请先了解全部位操作的含义,否则继续下去会很困难。
本质: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
[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;
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· DeepSeek 开源周回顾「GitHub 热点速览」
· 物流快递公司核心技术能力-地址解析分单基础技术分享
· .NET 10首个预览版发布:重大改进与新特性概览!
· AI与.NET技术实操系列(二):开始使用ML.NET
· 单线程的Redis速度为什么快?