今天上午修改代码时莫名其妙改出了一个小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"));