Object Pooling is an optimization technique that focuses on reusing objects instead of creating and destroying them. In this solution objects are only displayed if they are inside camera view and released after being outside.
https://www.youtube.com/watch?v=vGq9RtnU9tg
In our game we have created a lot of GameObjects (trees, rocks, buildings). Even with built-in Frustum Culling there was a big drop in game performance. After some investigation we figured out that Unity has a problem even with empty GameObjects if they number in hundreds of thousands.
Object Pooling gave us 3x more FPS than before (from 40 to 120).
This demo project showcases a custom implementation of Object Pooling used in our upcoming game:
It contains a working example scene and commented source code.
Unity 2019.3.2: go to Unity download archive page and download Unity 2019.3.2 version.
Just download ZIP of this repo or use GIT client and open in Unity. That's all :)
This is a demonstration of a solution that we're using in our project. This is not an out of the box plugin that you can download and make work in 2 minutes. Object Pooling requires specific code architecture approach that is unfortunately not taught on Unity tutorials. In this example we're using Dependency Injection. We also try to use Unity components only if necessary.
It may be scary, but don't worry and take a look :)
Good places to start understanding the code are:
ObjectPooler.Application.ObjectPoolerDisplayer
ObjectPooler.Application.Displayers.BuildingsDisplayer
ObjectPooler.Application.Displayers.PeopleDisplayer
and
Map.Application.MapGenerator
Buildings: 22064
People: 16914
Object Pooling ON | Object Pooling OFF |
---|---|
148 FPS | 30 FPS |