程序员开发实例大全宝库

网站首页 > 编程文章 正文

UNITY LAYERMASK层级(unity mask组件)

zazugpt 2024-10-24 19:24:29 编程文章 18 ℃ 0 评论

反编译Unity,发现LayerMask类中有

```

public static implicit operator int(LayerMask mask);

public static implicit operator LayerMask(int intVal);

```

![image.png](https://upload-images.jianshu.io/upload_images/13482466-37a2f4ebbb7e6ea3.png?imageMogr2/auto-orient/strip%7CimageView2/2/w/1240)

发现是隐式转换。Layermask和int互换。

此int值在二进制下有意义,例如:

OCT(2) = BIN ( 10) 表示选中层级1

OCT(3)=BIN(11)表示选中层级1,和层级2

根据这个特性,为了判断某个Layer是否在LayerMask中,封装一个LayerMask的工具类,如下

```

public static class LayerMaskUtility{

public static bool Contains(this LayerMask layerMask,int layer){

return (layerMask & 1 <<layer)>0;

}

public static bool Contains(this LayerMask layerMask,string layerName){

return (layerMask & 1 <<LayerMask.NameToLayer(layerName))>0;

}

}

```

位移运算符优先级非常高,代码先计算1 << LayerMask 然后再进行按位与运算。

Tags:

本文暂时没有评论,来添加一个吧(●'◡'●)

欢迎 发表评论:

最近发表
标签列表