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

时间:2011-08-31 04:01:33

标签: performance unity3d collision

我正在进行2D游戏,敌人会向我的玩家开枪。有两种方法可以实现子弹碰撞:

  1. 将对撞机添加到子弹中。向玩家添加刚体。使用OnCollision()方式进行碰撞检测。
  2. 使用Vector3.Distance()检查玩家和子弹之间每个子弹的距离,如果它小于预设值,那么我的玩家就会被击中。
  3. 问题是,哪种方法会有更好的表现(减少计算)?

3 个答案:

答案 0 :(得分:3)

很快,方法1,没有做到这一点。

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

但请记住,使用正确的方法也取决于你的子弹的速度,而使用对撞机或检查距离是相当慢的子弹(即金属弹头子弹),你会遇到问题一个快速的子弹(即快速像真正的子弹),两个可能的解决方案是使用项目设置 - >物理,或只是做一个Physcis.Raycast()来获得te子弹立即影响的对象。 / p>

答案 1 :(得分:1)

为了回答你的问题,我想说的对手是更好的方法,物理检测比检查每个帧的距离碰撞更加优化。

但这也取决于要处理的对象数量,您可以使用分析器查看速度减慢的位置,并在必要时切换代码。

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

答案 2 :(得分:0)

根据我的经验,我会说检测对撞机更快更好,无论如何你使用统一物理并在你的脚本上添加对撞机方法不会降低性能