In the first part 04-arrow-northeast of the pooling series I explained why you should use pooling and did a simple implementation of a pool class using a stack. In this post I’m going to show you an example how to use the prior work in your project.

For this we create a scene with an endless amount of flying cubes that are spawned at the right border of the screen and will fly to the opposite side.

Something that looks like this:

Ok, let’s do this

Given you’ve got the code from the previous part of the pooling tutorial, we only need a prefab and an additional script for this one to work.

For the prefab you can go with whatever you want. I went with the red cubes you see above.

The script is called Spawner.cs and implements two methods: Spawn() and Update(). To create a new cube at the right side of the screen the Spawn() method is called every x seconds.  The Update() method updates the position and rotation of all flying cubes.

See the code:

using UnityEngine;
using System.Collections;
using System.Collections.Generic;
using UnityEngine.UI;


public class Spawner : MonoBehaviour 
{
	List<GameObject> allObjects;

	void Start () 
	{
		// cache all created cubes for transform manipulations
		allObjects = new List<GameObject>();

		// Periodically spawn a new object
		InvokeRepeating("Spawn", 1, 0.6f);
		InvokeRepeating("UpdateUI", 0.1f, 0.2f);
	}


	/**
	 * Spawn a new cube at the spawner position adding some randomness to it.
	 */
	void Spawn()
	{
		var obj = Pool.Instance.Pop();
		if (obj != null)
		{
			var randomPosition = new Vector3(0, Random.Range(-5, 5), Random.Range(-2, 5));
			obj.transform.position = transform.position + randomPosition;
			obj.transform.Rotate(Random.Range(0, 360), Random.Range(0, 360), Random.Range(0, 360));

			// Store object in a list for movement stuff (see Update());
			allObjects.Add(obj);
		}
	}


	void Update()
	{
		// Move all objects. If an object x-position has reached -20 it is pushed back into the pool.
		for(int i = allObjects.Count-1; i >= 0; i--)
		{
			allObjects[i].transform.Translate(-0.1f, 0, 0, Space.World);
			allObjects[i].transform.Rotate(-1, 0, 0);

			if (allObjects[i].transform.position.x < -20)
			{
				Pool.Instance.Push(allObjects[i]);
				allObjects.RemoveAt(i);
			}
		}
	}
}

Unity demo project

You can download the whole Unity project here. Download