交通模拟——大量物体
Traffic simulation - large number of objects
我有一个包含以下列的 CSV:time
、carId
、x
、y
。我正在编写一个脚本,它将读取 CSV 并生成汽车对象,并根据数据随时间更新它们的位置。
在大约 20 分钟的时间内,必须实例化大约 3500 个汽车对象。虽然它们不会在一个时间点都在模拟中(一旦汽车到达我的道路网络中的某些点,它就会消失),但我想为数百个汽车对象移动通过的情况做好准备立即联网。
在为这么大的项目进行优化时,我对 Unity 及其渲染管道还很陌生。我知道在某些情况下,在 GameObjects 上 setActive(false)
比 destroy()
更好,也许这就是其中之一。在 Unity 中处理这么多游戏对象时,我还应该考虑什么?
这听起来是使用对象池的好机会。使用 setActive,您走在正确的轨道上。
遵循这个简短的教程:https://unity3d.com/learn/tutorials/topics/scripting/object-pooling
它应该可以大大减少实例化/销毁大量对象时的延迟。
What else should I consider when handling this many gameobjects in
Unity?
在大多数情况下,这实际上取决于将同时显示在屏幕上的对象或汽车的数量。
如果只有几辆车,则使用 回收对象。
您还应该使用 LOD 来优化和减少为对象渲染的三角形数量。
如果是数百辆汽车同时行驶的交通模拟,那么您应该使用现在内置于 Unity 中的 GPU Instancing。要启用 GPU,请使用标准着色器并选中 "Enable GPU Instancing" 框。
在 material 上启用它后,您可以使用 Graphics.DrawMeshInstanced
实例化对象并 MaterialPropertyBlock
更改它们的外观。
我有一个包含以下列的 CSV:time
、carId
、x
、y
。我正在编写一个脚本,它将读取 CSV 并生成汽车对象,并根据数据随时间更新它们的位置。
在大约 20 分钟的时间内,必须实例化大约 3500 个汽车对象。虽然它们不会在一个时间点都在模拟中(一旦汽车到达我的道路网络中的某些点,它就会消失),但我想为数百个汽车对象移动通过的情况做好准备立即联网。
在为这么大的项目进行优化时,我对 Unity 及其渲染管道还很陌生。我知道在某些情况下,在 GameObjects 上 setActive(false)
比 destroy()
更好,也许这就是其中之一。在 Unity 中处理这么多游戏对象时,我还应该考虑什么?
这听起来是使用对象池的好机会。使用 setActive,您走在正确的轨道上。
遵循这个简短的教程:https://unity3d.com/learn/tutorials/topics/scripting/object-pooling
它应该可以大大减少实例化/销毁大量对象时的延迟。
What else should I consider when handling this many gameobjects in Unity?
在大多数情况下,这实际上取决于将同时显示在屏幕上的对象或汽车的数量。
如果只有几辆车,则使用
您还应该使用 LOD 来优化和减少为对象渲染的三角形数量。
如果是数百辆汽车同时行驶的交通模拟,那么您应该使用现在内置于 Unity 中的 GPU Instancing。要启用 GPU,请使用标准着色器并选中 "Enable GPU Instancing" 框。
在 material 上启用它后,您可以使用 Graphics.DrawMeshInstanced
实例化对象并 MaterialPropertyBlock
更改它们的外观。