/// <summary> /// Spawns an object from the desired object pool. /// </summary> /// <param name="pooledObject"></param> /// <returns></returns> public static GameObject SpawnObject(PoolableObject pooledObject) { //If the static instance is null don't do anything and pop an error if (instance == null) { Debug.LogError("No Instance of ObjectPool exists"); return(null); } //Ensure the key exists first if (instance.objectPool.ContainsKey(pooledObject)) { if (instance.objectPool[pooledObject].Count < 1) { //If the queue was empty, but paddding was enabled, go ahead and add an additional entry if (instance.enablePadding) { //Instansiate at scene origin instance.AddEntry(pooledObject); } else { Debug.LogError($"Queue empty for {pooledObject.poolableName}. Consider increasing pool size"); return(null); } } //Dequeue an object instance.objCache = instance.objectPool[pooledObject].Dequeue(); //Enable/activate the object instance.objCache.SetActive(true); return(instance.objCache); } else { //If there wasn't a valid entry and unknown entry handling has been enabled, make an entry if (instance.unknownEntryHandling) { instance.objectPool.Add(pooledObject, new Queue <GameObject>()); //For the number specified in the poolable object, instansiate the applicable prefab for (int i = 0; i < pooledObject.pooledAmount; i++) { instance.AddEntry(pooledObject); } instance.objCache = instance.objectPool[pooledObject].Dequeue(); instance.objCache.SetActive(true); return(instance.objCache); } //If there wasn't a valid entry and unknown entry handling has been disabled, just pop an error else { Debug.LogError($"No entry exists for '{pooledObject.poolableName}' in the object pool"); return(null); } } }