public void Pool(string key, GameObject prefab, int count) { //if (_poolVos.ContainsKey(key)) //{ // Debug.LogWarning("Already have " + key + " pool."); // return; //} if (prefab.GetComponent <IPoolable>() == null) { Debug.LogError("You cant create " + prefab.name + ". IPoolable class is missing"); return; } var vo = new ObjectPoolVo { Key = key, Count = count, Prefab = prefab }; if (!_poolVos.ContainsKey(vo.Key)) { _poolVos.Add(vo.Key, vo); } Queue <GameObject> queue; if (!_objectQueues.ContainsKey(vo.Key)) { queue = new Queue <GameObject>(); _objectQueues.Add(vo.Key, queue); } else { queue = _objectQueues[vo.Key]; } for (var i = 0; i < vo.Count; i++) { newObj = GameObject.Instantiate(vo.Prefab, container.transform); newObj.GetComponent <IPoolable>().PoolKey = key; newObj.name = vo.Key; newObj.SetActive(false); queue.Enqueue(newObj); } }
public GameObject Get(string key) { if (!_objectQueues.ContainsKey(key)) { Debug.LogWarning("Not object in pool with key " + key); return(null); } if (_objectQueues[key].Count == 0) { Debug.LogWarning("Not enough object in pool with key " + key + ". Instantiating."); ObjectPoolVo vo = _poolVos[key]; Pool(vo.Key, vo.Prefab, 1); } newObj = _objectQueues[key].Dequeue(); newObj.SetActive(true); newObj.GetComponent <IPoolable>().OnGetFromPool(); return(newObj); }