当试图在场景中移动超过1000个刚体时,在统一中得到非常糟糕的预先问题

时间:2017-08-21 12:34:22

标签: c# unity3d game-physics

我有一个来自aprox的对象构建。 1700个小立方体网格(非常简单的网格)。如果有任何其他物体碰到它,那么我试图将它返回到原点(触发器是任何其他碰撞)。 结果是在非常糟糕的表现与完成卡住之间。

到目前为止我试图做的事情:

  • 将对象限制为一个碰撞触发器,以避免一次又一次地激活。
  • 禁用对象物理
  • 直接使用Physics和变换移动对象。

似乎是什么问题?甚至可以统一处理那么多物体和碰撞?

2 个答案:

答案 0 :(得分:2)

我认为,探测器的屏幕截图将更容易为这种情况考虑一个合适的解决方案。我认为任何绘制调用或碰撞都不会导致此问题。有关Unity3D Profiler的更多信息,请访问here。您可以尝试在固定更新中处理物理,并尝试不同的刚体属性组合(插值等)。古德勒克。

答案 1 :(得分:1)

问题在于Unity中的Physics不是本机解决方案。 Unity使用PhysX进行物理处理,但是它们被用作黑盒子,所以Unity不知道它是如何工作的。这就是为什么所有基于物理的操作都很复杂并且性能相当差的原因。 Unity3d似乎可以处理1000个基于物理的对象。它并不是Unity中唯一的限制,例如,如果你创建了大约10 000个游戏对象(无论它们具有哪种功能),他们甚至可以冻结Unity的编辑器。

至于可能的解决方案,你无能为力:

  • 查看优化指南和最佳做法hereherehere
  • 使用Unity的分析器优化物理性能(尝试删除基于物理的“尖峰”)
  • 尝试开发一些系统,该系统将禁用当前时刻未在场景中看到的游戏对象。
  • 尝试简化网格和对撞机。或者尝试制作1个大网格,当您需要互动时,它将分成更小的部分。
  • 尝试创建自己的基于数学的简单物理。我知道它会非常复杂,但是你的非通用物理解决方案可能比PhysX具有更好的性能。

无论如何,这将是一场艰难的斗争。