Skip to content
Taras Leskiv edited this page Apr 16, 2014 · 18 revisions

Summary: This project provides a simple implementation for pool of prefabs to avoid performance issues with runtime prefab instantiation.

The project contains an example of usage. You can also read about simple prefab pool from my blog post on blogger.


The usage is extremely simple. First you create an instance of PrefabPool (there are overloaded constructors for flexibility). The constructor with all parameters:

Creating the pool

	// Create pool of cubes containing instantiated cubePrefabs
	PrefabPool cubesPool = 
		new PrefabPool(cubePrefab, parent, initialPoolSize, growth, maxPoolSize);

This is the code that creates a pool of cubePrefab transform objects, instantiates initialPoolSize number of them (items are inactive after instantiation). If there is a need to instantiate more prefabs they will be batch instantiated growth number at a time. You can also limit the size of your pool by specifying maxPoolSize.

Now the only methods you should care about are ObtainPrefab and RecyclePrefab. When you obtain prefab from the pool it is set to be active and you specify its new position, rotation and scale.

Obtaining instantiated prefab from the pool

Currently when item is obtained you provide a new parent for obtained instance. Transform is reset and layer is set to parents' layer. Set parent to null if instance does not need to have a parent.

Transform retrievedCubeInstance1 = cubesPool.ObtainPrefabInstance(newParent.gameObject);

Recycling active instantiated prefab

cubesPool.RecyclePrefab(retrievedCubeInstance1);