【问题标题】:Unity3D Which way of doing 2D collision is faster?Unity3D 哪种方式进行 2D 碰撞更快?
【发布时间】:2011-11-07 07:43:06
【问题描述】:
我正在做一个 2D 游戏,敌人会向我的玩家射击。子弹碰撞有两种方法:
- 为子弹添加碰撞器。为播放器添加刚体。使用 OnCollision() 方式进行碰撞检测。
- 使用Vector3.Distance()检查每个子弹与玩家的距离,如果小于预设值,则我的玩家被击中。
问题是,哪种方法性能更好(计算量更少)?
【问题讨论】:
标签:
performance
unity3d
collision
【解决方案1】:
简而言之,方法 1,对此没有任何疑问。
我假设你想要有很多玩家(比如说 N)和很多子弹(比如说 M)。方法 2 需要测试所有子弹与所有玩家,即执行您的距离测试 N*M 次。另一方面,您可以传达物理引擎将通过使用空间细分技术优化测试(仅针对“附近”对象进行测试)。
但请记住,正确的使用方法还取决于子弹的速度,而使用对撞机或使用相当慢的子弹(即合金弹头子弹)检查距离是可以的,但你会遇到问题快速子弹(即像真正的子弹一样快),两种可能的解决方案是使用 Project Settings->Physics 玩一点,或者,只需执行 Physcis.Raycast() 即可获得子弹立即撞击的对象。
【解决方案3】:
根据我的经验,我会说检测对撞机更快更好,在任何情况下,您使用统一物理并将对撞机方法添加到您的脚本不会降低性能