交通模拟 - 大量对象

时间:2018-05-31 20:42:44

标签: c# unity3d simulation

我的CSV包含以下列:timecarIdxy。我正在编写一个脚本,它将读取CSV并生成汽车对象,并根据数据随时更新其位置。

在大约20分钟的时间内,必须实例化大约3500辆汽车对象。虽然他们不会在某个时间点进入模拟(一旦汽车到达我的公路网中的某些点,它就会消失),但我想为数百个汽车物体移动的情况做好准备立刻通过网络。

在优化这个大型项目时,我仍然是Unity及其渲染管道的新手。我知道在某些情况下,与setActive(false)相比,游戏对象destroy()更好,也许这就是其中之一。在Unity中处理这么多游戏对象时我还应该考虑什么?

2 个答案:

答案 0 :(得分:2)

这听起来像是使用对象池的绝佳机会。使用setActive您正走在正确的轨道上。

请遵循以下简短教程:https://unity3d.com/learn/tutorials/topics/scripting/object-pooling

它应该通过实例化/销毁大量对象来减少很多延迟。

答案 1 :(得分:2)

  

在处理这么多游戏对象时我还应该考虑什么   统一?

在大多数情况下,这实际上取决于将在屏幕上同时显示的对象或汽车的数量。

如果只有少量汽车,则使用Object Pooling来回收对象。

您还应该使用LOD来优化和减少为对象渲染的三角形数量。

如果是同时运行数百辆汽车的交通模拟,那么您应该使用现在内置于Unity中的GPU Instancing。要启用GPU,请使用标准着色器并检查"启用GPU实例化"框。

enter image description here

在素材上启用后,您可以使用Graphics.DrawMeshInstanced来实例化对象,MaterialPropertyBlock可以更改它们的外观。