当试图在场景中移动超过 1000 个刚体时,unity 中出现非常糟糕的预制问题
getting really bad prefomace issue in unity when trying to move more then 1000 rigidbodies in the scene
我有一个从 aprox 构建的对象。 1700 个小立方体网格(非常简单的网格)。如果有被击中,我试图在任何其他物体击中它后几秒钟 return 它到原点(触发器是任何其他碰撞)。
结果介于性能非常差和完全卡住之间。
到目前为止我尝试做的事情:
- 将对象限制为一次碰撞触发器以避免反复激活。
- 禁用对象物理
- 直接使用物理和变换移动对象。
似乎是什么问题? Unity 甚至可以处理那么多物体和碰撞吗?
profiler 的屏幕截图将使我更容易为这种情况想出合适的解决方案。我认为任何绘图调用或碰撞都不会导致此问题。更多关于 Unity3D 分析器的信息是 here。您可以尝试在固定更新中处理物理并尝试刚体属性(插值等)的不同组合。祝你好运。
问题是 Unity 中的物理不是原生解决方案。 Unity 使用 PhysX 进行物理处理,但它们的使用就像一个黑盒子,所以 Unity 不知道它在幕后是如何工作的。这就是为什么所有基于物理的操作都很复杂并且性能很差的原因。 Unity3d 似乎无法处理 1000 个基于物理的对象。这不是 Unity 中的唯一限制,例如,如果您创建大约 10,000 个游戏对象(无论它们将具有哪些功能),它们甚至可以冻结 Unity 的编辑器。
至于可能的解决方案,您无能为力:
- 查看优化指南和最佳做法here, here and here。
- 使用 Unity 的分析器优化物理性能(尝试移除基于物理的 "spikes")
- 尝试开发一些系统来禁用当前场景中未看到的游戏对象。
- 尝试简化网格和碰撞体。或者尝试制作 1 个大网格,当您需要交互时,它会分成更小的部分。
- 尝试创建您自己的简单的基于数学的物理学。我知道这会非常复杂,但您的非通用物理解决方案可能比 PhysX 具有更好的性能。
所以无论如何都会是一场艰苦的斗争。
我有一个从 aprox 构建的对象。 1700 个小立方体网格(非常简单的网格)。如果有被击中,我试图在任何其他物体击中它后几秒钟 return 它到原点(触发器是任何其他碰撞)。 结果介于性能非常差和完全卡住之间。
到目前为止我尝试做的事情:
- 将对象限制为一次碰撞触发器以避免反复激活。
- 禁用对象物理
- 直接使用物理和变换移动对象。
似乎是什么问题? Unity 甚至可以处理那么多物体和碰撞吗?
profiler 的屏幕截图将使我更容易为这种情况想出合适的解决方案。我认为任何绘图调用或碰撞都不会导致此问题。更多关于 Unity3D 分析器的信息是 here。您可以尝试在固定更新中处理物理并尝试刚体属性(插值等)的不同组合。祝你好运。
问题是 Unity 中的物理不是原生解决方案。 Unity 使用 PhysX 进行物理处理,但它们的使用就像一个黑盒子,所以 Unity 不知道它在幕后是如何工作的。这就是为什么所有基于物理的操作都很复杂并且性能很差的原因。 Unity3d 似乎无法处理 1000 个基于物理的对象。这不是 Unity 中的唯一限制,例如,如果您创建大约 10,000 个游戏对象(无论它们将具有哪些功能),它们甚至可以冻结 Unity 的编辑器。
至于可能的解决方案,您无能为力:
- 查看优化指南和最佳做法here, here and here。
- 使用 Unity 的分析器优化物理性能(尝试移除基于物理的 "spikes")
- 尝试开发一些系统来禁用当前场景中未看到的游戏对象。
- 尝试简化网格和碰撞体。或者尝试制作 1 个大网格,当您需要交互时,它会分成更小的部分。
- 尝试创建您自己的简单的基于数学的物理学。我知道这会非常复杂,但您的非通用物理解决方案可能比 PhysX 具有更好的性能。
所以无论如何都会是一场艰苦的斗争。