网站锚点链接怎么做,公众号开发教程零基础,1688网站的特点,商城网站源代码今天使用Physics2D.OverlapAreaNonAlloc进行物理检测时候#xff0c;通过LayerMask.NameToLayer传入了int值的LayerMask#xff0c;结果一直识别不到#xff0c;经过Debug才找到问题#xff0c;竟是LayerMask的“值”传输有问题#xff0c;记录一下。 直接贴代码输出结果通过LayerMask.NameToLayer传入了int值的LayerMask结果一直识别不到经过Debug才找到问题竟是LayerMask的“值”传输有问题记录一下。 直接贴代码输出结果这里新增一个Layer “TestLayer”挂载脚本运行代码后面是对应的输出如图 代码如下
using UnityEngine;public class LayerTest : MonoBehaviour
{public LayerMask layerMask; // TestLayerprivate void Awake(){Debug.Log(layerMask.value); // 64 Debug.Log((int)layerMask); // 64Debug.Log(gameObject.layer); // 6Debug.Log(LayerMask.NameToLayer(TestLayer)); // 6Debug.Log(LayerMask.GetMask(TestLayer)); // 64 }
}可以看到对我们定义的LayerMask类型无论是强转还是直接取值前两句输出获取到的值是枚举的实际值是16的结果 而直接获取对象的Layer和通过LayerMask.NameToLayer
第三四句输出获取到的值都是对应在LayerManager里面的索引这两个是完全不一样的值。而LayerMask.GetMask第五句输出获取到的值也是枚举的实际值注意LayerMask.GetMask的传参的不定长的字符串数组获取到的是传入的字符串转换成LyaerMask后做“和”运算的结果。 Physics2D.OverlapAreaNonAlloc参数里需要的LyaerMask值是枚举的实际值而不是索引值所以不能使用LayerMask.NameToLayer获取所以检测不到应该使用LayerMask.GetMask获取。 总结在遇到LayerMask类型的参数时要先确定是要索引值还是实际值再确定如何获取一般来讲如果该参数包含多种LayerMask枚举时那么该参数就一定是要取实际值而不是索引值的。物理引擎中Layer检测一般是检测很多种类的所以应该用实际值。