【问题标题】:Unity3D Which way of doing 2D collision is faster?Unity3D 哪种方式进行 2D 碰撞更快?
【发布时间】:2011-11-07 07:43:06
【问题描述】:

我正在做一个 2D 游戏,敌人会向我的玩家射击。子弹碰撞有两种方法:

  1. 为子弹添加碰撞器。为播放器添加刚体。使用 OnCollision() 方式进行碰撞检测。
  2. 使用Vector3.Distance()检查每个子弹与玩家的距离,如果小于预设值,则我的玩家被击中。

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

【问题讨论】:

标签: performance unity3d collision


【解决方案1】:

简而言之,方法 1,对此没有任何疑问。

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

但请记住,正确的使用方法还取决于子弹的速度,而使用对撞机或使用相当慢的子弹(即合金弹头子弹)检查距离是可以的,但你会遇到问题快速子弹(即像真正的子弹一样快),两种可能的解决方案是使用 Project Settings->Physics 玩一点,或者,只需执行 Physcis.Raycast() 即可获得子弹立即撞击的对象。

【讨论】:

  • 是的。我也在考虑物理会为碰撞检查做优化。
【解决方案2】:

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

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

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

【讨论】:

    【解决方案3】:

    根据我的经验,我会说检测对撞机更快更好,在任何情况下,您使用统一物理并将对撞机方法添加到您的脚本不会降低性能

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2018-01-28
      • 2019-04-21
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多