Raycasting Layermask 与 RaycastAll

Raycasting Layermask vs RaycastAll

嗨,我有一个小问题,关于使用图层蒙版进行光线投射与使用 RaycastAll 的效果如何。

我试图从我的物体内部投射光线,并对光线进行图层蒙版以与原始物体发生碰撞,因此我需要忽略原始物体本身的 "hit"。

我的问题是:当 Raycasting 使用图层蒙版时,它是否也记录了与其他不需要的图层的碰撞然后简单地忽略它们,或者它甚至不首先记录与这些图层的碰撞?如果我使用 RaycastAll 从逻辑上决定是否响应某个层与以某种方式严格使用图层蒙版相比,性能会更差还是相等?还是根本没有明显的区别?

我知道有些帖子说 "if you cast it from inside the object it wont collide with that object" 但显然确实如此。

谢谢

你可以看看official Unity's physics preformance tutorial。首先,Raycast 是一种相当便宜的操作,但它的性能实际上取决于您实际进行 Raycasting 的方式。例如,对于您的一个问题 - RaycastAll 比在单独的层上进行 Raycast 更昂贵,它在上面的 link 中也提到了。它基于物理学的实际工作原理。 Unity 本身并不实现物理,而是使用现有的解决方案(例如用于 3d 的 PhysiX,以及更早的用于 2d 物理的​​ Box2d)。

此外,光线的长度实际上会影响 Raycast 的性能。您投射的光线越短,您获得的性能就越好。最坏的情况是光线投射到无穷大。另一种情况是 Collider.Raycast 比 Physics.Raycast 便宜。

这已经不是什么秘密了,在游戏开发中,物理背后的数学方程式并不多,所以您可能会想到这样的事情 - 方程式越简单,性能越好,完成时间也越短。所以 Raycast 可以被视为方程组,其中你有直线方程(实际 Raycast)和一些方程,它们描述了 plane/space 中的一些 2d/3d 对象,任务是两个计算交点在你的线 (Ray) 和其他对象之间。

如果您的游戏中没有复杂的物理特性,您可能看不出 RaycastAll 和带图层蒙版的 Raycast 之间的区别,或者更短的光线长度,但性能确实不同。