Unity3D哪种方式做2D碰撞更快



我正在制作一款2D游戏,其中敌人会向我的玩家射击。有两种方法可以实现子弹的碰撞:

  1. 为子弹添加碰撞器。为玩家添加刚体。使用OnCollision()方法进行碰撞检测。
  2. 使用Vector3.Distance()检查每个子弹在玩家和子弹之间的距离,如果它小于预设值,那么我的玩家被击中。

问题是,哪种方法会有更好的性能(更少的计算)?

简而言之,方法一,毫无疑问

假设你想要有许多玩家(假设是N)和许多子弹(假设是M),方法2需要测试所有子弹和所有玩家,这需要执行N*M次距离测试。另一方面,你可以传递物理引擎将通过使用空间细分技术(仅针对"近"对象进行测试)来优化测试。

但要记住,正确的使用方法也取决于你的子弹的速度,而使用对撞机或检查距离对于相当慢的子弹是可以的。金属弹头子弹),你就会遇到快速子弹的问题。像真正的子弹一样快速),两种可能的解决方案是在Project Settings->Physics中发挥一点作用,或者只是执行Physics . raycast()来获得子弹立即撞击的对象。

要回答你的问题,我认为对撞机是更好的方法,物理检测比检查每一帧的距离碰撞更优化。

但这也取决于要处理的对象的数量,你可以使用分析器来查看它在哪里变慢,并在必要时切换你的代码。

这篇文章也可能有所帮助:http://technology.blurst.com/unity-physics-trigger-collider-examples/

根据我的经验,我认为检测碰撞器更快更好,在任何情况下,你使用统一物理和添加碰撞器方法到你的脚本不会降低性能

最新更新