/// <summary> /// Use "PoolTypes.TYPE.ToString()" as poolTag /// </summary> public GameObject GetObjectFromPool(string poolTag) { currentPool = gameObjectPools[poolTag]; //If pool queue is empty creates new instances and asigns the last added instance if (pooledObjectQueues[poolTag].Count == 0) { for (int i = 0; i < currentPool.IncrementalSteps; i++) { currentInstance = Instantiate(currentPool.Prefab); currentInstance.transform.SetParent(currentPool.PooledObjectParent.transform); ReturnObjectToPool(poolTag, currentInstance); } } currentInstance = pooledObjectQueues[poolTag].Dequeue(); currentInstance.SetActive(true); IpooledObjectGet = currentInstance.GetComponent <IPooleableObject>(); if (IpooledObjectGet != null) { IpooledObjectGet.OnGetFromPool(); } IpooledObjectGet = null; return(currentInstance); }
/// <summary> /// Use "PoolTypes.TYPE.ToString()" as poolTag /// </summary> public void ReturnObjectToPool(string poolTag, GameObject gameObjectToReturn) { pooledObjectQueues[poolTag].Enqueue(gameObjectToReturn); IpooledObjectReturn = currentInstance.GetComponent <IPooleableObject>(); if (IpooledObjectReturn != null) { IpooledObjectReturn.OnReturnToPool(); } IpooledObjectReturn = null; gameObjectToReturn.transform.SetParent(gameObjectPools[poolTag].PooledObjectParent.transform); gameObjectToReturn.SetActive(false); }
public GameObject SpawnFromPool(string pTag, Vector3 pPos, Quaternion pRot) { GameObject objToSpawn = poolDictionary[pTag].Dequeue(); objToSpawn.SetActive(true); objToSpawn.transform.position = pPos; objToSpawn.transform.rotation = pRot; IPooleableObject pooledObj = objToSpawn.GetComponent <IPooleableObject>(); if (pooledObj != null) { pooledObj.OnObjectSpawn(); } poolDictionary[pTag].Enqueue(objToSpawn); return(objToSpawn); }