using System.Collections.Generic; using UnityEngine; public class GenericObjectPool : MonoBehaviour { public static GenericObjectPool Instance; [System.Serializable] public class Pool { public string tag; public GameObject prefab; public int size; } public List pools; public Dictionary> poolDictionary; private void Awake() { Instance = this; poolDictionary = new Dictionary>(); foreach (Pool pool in pools) { Queue objectPool = new Queue(); for (int i = 0; i < pool.size; i++) { GameObject obj = Instantiate(pool.prefab); obj.SetActive(false); // 꺼둔 상태로 보관 objectPool.Enqueue(obj); } poolDictionary.Add(pool.tag, objectPool); } } // ⭐ 몹을 꺼내 쓸 때 호출 (Instantiate 대신 사용) public GameObject SpawnFromPool(string tag, Vector3 position, Quaternion rotation) { if (!poolDictionary.ContainsKey(tag)) return null; GameObject objectToSpawn = poolDictionary[tag].Dequeue(); objectToSpawn.SetActive(true); objectToSpawn.transform.position = position; objectToSpawn.transform.rotation = rotation; poolDictionary[tag].Enqueue(objectToSpawn); // 다시 큐의 끝으로 보냄 return objectToSpawn; } }