// 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 ShopScrollObject_pool pooledObject = spawnedGameObject.AddComponent <ShopScrollObject_pool>(); pooledObject.pool = this; } // put the instance in the root of the scene and enable it spawnedGameObject.transform.SetParent(null); spawnedGameObject.SetActive(true); // return a reference to the instance //Debug.LogWarning(" spawned GameObject - " + spawnedGameObject.name); return(spawnedGameObject); }
// Return an instance of the prefab to the pool public void ReturnObject(GameObject toReturn) { ShopScrollObject_pool pooledObject = toReturn.GetComponent <ShopScrollObject_pool>(); // if the instance came from this pool, return it to the pool if (pooledObject != null && pooledObject.pool == this) { // make the instance a child of this and disable it toReturn.transform.SetParent(transform); toReturn.SetActive(false); // add the instance to the collection of inactive instances inactiveInstances.Push(toReturn); //Debug.LogWarning(" return GameObject - " + toReturn.name); } // otherwise, just destroy it else { Debug.LogWarning(toReturn.name + " was returned to a pool it wasn't spawned from! Destroying."); DestroyImmediate(toReturn); } }