Unity大规模世界模拟性能问题。

时间:2018-12-14 08:42:54

标签: c# performance unity3d simulation frame-rate

我们正在研究模拟游戏。世界上大约有25000个对象。所有人都有1个统一的c#脚本。如果激活空更新功能,我们将获得15 fps;如果激活0.02时间尺度的空固定更新,则我们将在平均规格计算机上获得1-2 fps。在Will中,我们需要对更新功能做一些事情。因此,对于此性能问题,需要一些帮助。

在那种情况下,我们可以为性能做些什么?

感谢您的建议和帮助。

2 个答案:

答案 0 :(得分:0)

即使您的问题很广泛,我也会尝试给出一些提示。我的猜测是您在Update中进行了大量计算,这会导致fps问题。同时渲染25000对象也会导致fps问题。首先,我建议使用Unity ProfilerUnity statistics找出导致问题的原因。然后我的建议将基于我假设的问题:

  1. 使用协程而不是在Update中进行所有计算。
  2. 使用Occlusion culling渲染尽可能少的对象。您不需要渲染不在Camera frustum中的对象。
  3. 如果您有详细划分的网格,则有机会使用level of detail

如果您缩小问题范围,我很乐意进一步提供帮助。祝你好运!

答案 1 :(得分:0)

非常需要调用Update()是Unity的主要性能下降之一。这就是为什么他们现在转向实体组件系统,而无需进行此类跳转的原因。 如果所有对象都具有相同的脚本,那么修改代码应该非常容易,以使只有1个对象具有该脚本,但是可以对所有其他对象进行操作(即通过for(;;)循环)。这应该已经带来了巨大的进步。

如果您的对象有可能共享网格,请使用实例化网格渲染,它的速度要快两个数量级