Пример #1
0
        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);
            }
        }
Пример #2
0
        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);
        }