危险的类型转换——LayerMask无效的原因

今天上午修改代码时莫名其妙改出了一个小bug,Raycast射出的射线射中已经被LayerMask屏蔽的碰撞器上依然回返回该碰撞器。经过反复测试,才终于搞明白bug的原因

错误代码:

bool isCollider = Physics.Raycast(ray, out hit,LayerMask.GetMask("Map"));

看起来一点毛病都没有,实际上,这里犯了误用重载的错误,也就是说,Raycast的重载里,并没有对应的Physics.Raycast(Ray ray, out RayCastHit hitInfo, int layerMask),那为什么编译器没有报错?那是因为,Raycast有这样的一个重载:

bool Physics.Raycast(Ray ray, out RayCastHit hitInfo, float maxDistance)

是的……按照错误代码的格式输入的话,layerMask被当做了maxDistance……所以我们需要找到一个合适的格式

正确代码:

bool isCollider = Physics.Raycast(ray, out hit,1000f,LayerMask.GetMask("Map"));


猜你喜欢

转载自blog.csdn.net/keven2148/article/details/79506161