圆形碰撞机2D或Box Collider 2D

时间:2017-02-02 20:27:11

标签: unity3d collider

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

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

  

2500碰撞者

     
      
  • 胶囊453-481ms

  •   
  • Box 490-520ms

  •   
  • 球体190-233ms

  •   

有没有人有关于哪台电脑更快处理的信息? 谢谢!

2 个答案:

答案 0 :(得分:2)

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

圆形对撞机:非常简单的计算;只是比较圆的中心和P与圆的半径之间的距离。如果距离<半径,该点在圆圈内。 (如果我们假设他们正在比较距离 2 &lt; radius 2 ,那么计算起来甚至更便宜,因为这样可以避免有点昂贵的平方根操作。)

Box collider 也很简单,只需要一点线性代数; as per this solution,你需要计算和比较矩形顶点和点P之间的两对点积。(这背后的理论是P应该在内部与矩形的所有顶点形成锐角 - 如果它没有,它在外面。)这不是很昂贵,因为计算点积只是一点乘法和加法。但是,相对于圆形对撞机来说,它仍然需要更多的步骤并且会更慢。

多边形对撞机:确定点是否在多边形内是事情变得非常缓慢的地方。由于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是否在多边形内。

边缘对撞机:使用此对撞机,基于点的碰撞类比并不真正起作用。最简单的方法是设想它在每对顶点之间投射光线,以检查它们是否与任何碰撞器形状相交。这是与其他碰撞器相比较的苹果与橘子的比较,因为对撞机的顶点不会形成封闭的形状 - 对撞机没有“内部”。因此,此碰撞器的使用案例将受到限制(并且似乎不适用于您在此处所需的内容)。有趣的是,this collider performs better than a polygon collidertrades blows with the box collider,但这些只是在特定用例(如静态地形/障碍物)中的有效比较。

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

如果您将模拟扩展到这些单独的相互作用不再相关且严格地说碰撞检测很重要的点,那么您可能希望切换到更高效的对撞机。当然,你最了解你的项目,这取决于你。

答案 1 :(得分:0)

球体&gt;胶囊&gt;盒子&gt;目

圈&gt;没有2D Capsule :(&gt; Box&gt;不确定Edge或Poly是否会最快。