// Returns an instance of the prefab public GameObject GetObject() { GameObject spawnedGameObject; // if there is an inactive instance of the prefab ready to return, return that if (inactiveInstances.Count > 0) { // remove the instance from teh collection of inactive instances spawnedGameObject = inactiveInstances.Pop(); } // otherwise, create a new instance else { spawnedGameObject = (GameObject)GameObject.Instantiate(prefab); // add the PooledObject component to the prefab so we know it came from this pool PooledUI pooledObject = spawnedGameObject.AddComponent <PooledUI>(); pooledObject.pool = this; } // enable the instance spawnedGameObject.SetActive(true); // return a reference to the instance return(spawnedGameObject); }
// Return an instance of the prefab to the pool public void ReturnObject(GameObject toReturn) { PooledUI pooledObject = toReturn.GetComponent <PooledUI>(); // if the instance came from this pool, return it to the pool if (pooledObject != null && pooledObject.pool == this) { // disable the instance toReturn.SetActive(false); // add the instance to the collection of inactive instances inactiveInstances.Push(toReturn); } // otherwise, just destroy it else { Debug.LogWarning(toReturn.name + " was returned to a pool it wasn't spawned from! Destroying."); Destroy(toReturn); } }