当前位置: 首页 > news >正文

Unity LayerMask避坑笔记

        今天使用Physics2D.OverlapAreaNonAlloc进行物理检测时候,通过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类型,无论是强转还是直接取值(前两句输出),获取到的值是枚举的实际值,是1<<6的结果, 而直接获取对象的Layer和通过LayerMask.NameToLayer

(第三,四句输出)获取到的值,都是对应在LayerManager里面的索引,这两个是完全不一样的值。而LayerMask.GetMask(第五句输出)获取到的值也是枚举的实际值,注意LayerMask.GetMask的传参的不定长的字符串数组,获取到的是传入的字符串转换成LyaerMask后做“和”运算的结果。

        Physics2D.OverlapAreaNonAlloc参数里需要的LyaerMask值是枚举的实际值,而不是索引值,所以不能使用LayerMask.NameToLayer获取,所以检测不到,应该使用LayerMask.GetMask获取。

        总结,在遇到LayerMask类型的参数时,要先确定是要索引值还是实际值,再确定如何获取,一般来讲,如果该参数包含多种LayerMask枚举时,那么该参数就一定是要取实际值而不是索引值的。物理引擎中,Layer检测一般是检测很多种类的,所以应该用实际值。

 

相关文章:

  • 基于transformers框架实践Bert系列5-阅读理解(文本摘要)
  • Redis常见数据类型(3)-String, Hash
  • 学习平台|基于Springboot+vue的学习平台系统的设计与实现(源码+数据库+文档)
  • c语言之运算符练习题
  • Spring Boot集成testcontainers快速入门Demo
  • 基于地理坐标的高阶几何编辑工具算法(5)——合并相交面
  • Python操作MySQL实战
  • 椋鸟C++笔记#3:类的默认成员函数
  • 【html】网页布局模板01---简谱风
  • Java_IO流学习
  • GESP 四级冲刺训练营(1):字符串
  • linux内核符号表
  • 踩坑——纪实
  • VUE 页面生命周期基本知识点
  • 瑞芯微RV1126——ffmpeg环境搭建
  • 【翻译】babel对TC39装饰器草案的实现
  • 2017前端实习生面试总结
  • Bootstrap JS插件Alert源码分析
  • C++11: atomic 头文件
  • co.js - 让异步代码同步化
  • conda常用的命令
  • JSDuck 与 AngularJS 融合技巧
  • MYSQL 的 IF 函数
  • Quartz实现数据同步 | 从0开始构建SpringCloud微服务(3)
  • scala基础语法(二)
  • Spring技术内幕笔记(2):Spring MVC 与 Web
  • 初探 Vue 生命周期和钩子函数
  • 从0搭建SpringBoot的HelloWorld -- Java版本
  • 基于遗传算法的优化问题求解
  • 快速构建spring-cloud+sleuth+rabbit+ zipkin+es+kibana+grafana日志跟踪平台
  • 为视图添加丝滑的水波纹
  • 我的业余项目总结
  • 在electron中实现跨域请求,无需更改服务器端设置
  • 如何在 Intellij IDEA 更高效地将应用部署到容器服务 Kubernetes ...
  • ​secrets --- 生成管理密码的安全随机数​
  • # Panda3d 碰撞检测系统介绍
  • (0)Nginx 功能特性
  • (C++17) std算法之执行策略 execution
  • (Matalb回归预测)PSO-BP粒子群算法优化BP神经网络的多维回归预测
  • (板子)A* astar算法,AcWing第k短路+八数码 带注释
  • (仿QQ聊天消息列表加载)wp7 listbox 列表项逐一加载的一种实现方式,以及加入渐显动画...
  • (蓝桥杯每日一题)love
  • (全注解开发)学习Spring-MVC的第三天
  • (十二)Flink Table API
  • (四)事件系统
  • (终章)[图像识别]13.OpenCV案例 自定义训练集分类器物体检测
  • (转)树状数组
  • ***php进行支付宝开发中return_url和notify_url的区别分析
  • .NET CF命令行调试器MDbg入门(三) 进程控制
  • .net websocket 获取http登录的用户_如何解密浏览器的登录密码?获取浏览器内用户信息?...
  • .net web项目 调用webService
  • .Net 访问电子邮箱-LumiSoft.Net,好用
  • .net下的富文本编辑器FCKeditor的配置方法
  • :中兴通讯为何成功
  • @Autowired自动装配