Circle Collider 2D 或 Box Collider 2D

Circle Collider 2D or Box Collider 2D

我做了一些研究,但找不到最有效的答案,是 2D 盒式对撞机还是 2D 圆形对撞机?

this question 很快得到了一个很好的答案,它说最快的是球形对撞机,其次是胶囊对撞机,然后是盒子对撞机,但我想知道 2D 对撞机。

2500 Colliders

  • Capsule 453-481ms

  • Box 490-520ms

  • Sphere 190-233ms

有没有人知道哪个计算机处理速度更快? 谢谢!

球体 > 胶囊体 > 长方体 > 网格体

Circle > No 2D Capsule :( > Box > 不确定 Edge 或 Poly 是否最快。

可以在严格的数学基础上比较不同 2D 碰撞器之间的性能差异;通过确定确定点 (P) 是否在特定形状内所需的步骤,可以掌握其成本的相对概念:

Circle collider: 很简单的计算;只需将圆心与 P 之间的距离与圆的半径进行比较即可。如果距离 < 半径,则该点在圆内。 (如果我们假设他们正在比较 distance2 < radius2,计算起来会更便宜,因为这避免了有点昂贵的平方根运算。)

Box collider: 也相当简单,只需要一点线性代数; as per this solution,你需要计算并比较矩形顶点和点P之间的2对点积。(这背后的理论是P应该与矩形的所有顶点在内部形成锐角 - 如果它不是,它在外面。)这不是很昂贵,因为计算点积只是一些乘法和加法。不过相对于circle collider来说还是多了很多步,速度会慢一些。

多边形碰撞器:确定一个点是否在多边形内的过程会变得非常缓慢。由于 Unity 的多边形碰撞器可能是凹面的,因此 determining which side of each edge P lies on 等简化方法行不通。

潜在凹多边形的一种方法是 perform a raycast that passes from outside of the polygon to P,并计算它穿过多少条边 - 如果它是奇数,则 P 在多边形内部。 (我以前在 3D 中实现过一次,但我不确定是否有更快的方法。)还有其他方法,但它们都比前面两种碰撞检测慢;它们都需要将 P 与多边形的每条边或顶点进行比较,并且需要多次乘法、加法,有时甚至除法(慢!)才能确定 P 是否在多边形内。

边缘对撞机:使用此对撞机,point-based 碰撞类比实际上不起作用。设想它的最简单方法是在它的每对顶点之间投射一条射线,以检查它们是否与任何碰撞器形状相交。这有点 apples-to-oranges 与其他碰撞器的比较,因为碰撞器的顶点不形成闭合形状 - 没有碰撞器的 "inside"。因此,您对撞机的用例将受到限制(并且似乎不适用于您在这里想要的)。有趣的是,this collider performs better than a polygon collider and trades blows with the box collider,但同样,这些只是特定用例中的有效比较(如静态 terrain/obstacles)。

希望这会有所帮助 - 我没有包含大多数方法背后的任何实施细节或数学理论,但如果您想进一步阅读它们,我会尽可能包含链接。正如我在评论中指出的那样,使用最适合您正在使用的对象的对撞机 - 毕竟,圆形对撞机可能比盒子对撞机便宜,但它在物理交互中的表现也非常不同。

如果您将模拟扩展到这些单独的交互不再相关并且严格来说碰撞检测很重要的程度,那么您可能想要切换到更高效的对撞机。当然,您最了解自己的项目,所以这取决于您。