コード例 #1
0
        public GameObject SpawnFromPool(PoolObjectsTag tag)
        {
            if (!poolDictionary.ContainsKey(tag))
            {
                Debug.LogWarning($"Pool with tag {tag}, doesn't excists");
                return(null);
            }

            //If the initialized size of the queue is not enough, creates another object
            var objectToSpawn = poolDictionary[tag].Count == 0 ? CreateInstance(tag) : poolDictionary[tag].Dequeue();

            objectToSpawn.SetActive(true);
            objectToSpawn.transform.position = transform.position;
            objectToSpawn.transform.rotation = Quaternion.identity;

            var pooledObj = objectToSpawn.GetComponent <IPooledObject>();

            if (pooledObj != null)
            {
                pooledObj.OnObjectSpawn();
                pooledObj.Tag = tag;
            }

            return(objectToSpawn);
        }
コード例 #2
0
        private Pool GetPoolElement(PoolObjectsTag tag)
        {
            Pool poolElement = new Pool();

            foreach (Pool pool in pools)
            {
                if (pool.tag == tag)
                {
                    poolElement = pool;
                    break;
                }
            }

            return(poolElement);
        }
コード例 #3
0
        private GameObject CreateInstance(PoolObjectsTag tag)
        {
            Pool       poolElement = GetPoolElement(tag);
            GameObject prefab      = poolElement.prefab;

            if (prefab == null)
            {
                Debug.LogWarning($"Instantiation tag:{tag} error");
                return(null);
            }

            GameObject obj = Instantiate(prefab);

            obj.transform.SetParent(transform);

            return(obj);
        }