我用Raycast检测两个物体是否碰撞,发现无论如何结果都不太对劲,ray貌似忽略了我设置的LayerMask
代码是这样的:
Physics.RaycastAll(start, Vector3.down, 1 << mask);
看出来问题在哪里了么?
尼玛,根本没有Physics.Raycast(Vector3 start, out RaycastHit hit, int layerMask) 这样的重载好不好。。。
我不知道从哪儿得来的一个印象,觉得有这么一个重载,就一直在用。
但是为什么这样调用编译没问题呢,这涉及到了C#参数的隐式转换。
Physics.Raycast恰好有一个重载方法是:
Physics.Raycast(Vector3 start, out RaycastHit hit, float maxDistance)
因为1<<mask是int,隐式转换成float,符合了上面的重载,于是编译是不会出错的。但这样的结果根你期待的设置LayerMask是完全不一样的,你只不过设置了一个maxDistance值等于layermask值的ray
正确的重载应该是:
Physics.Raycast(Vector3 start, out RaycastHit hit, float maxDistance,int layerMask)