示例#1
0
        public GameObject SpawnFromPool(GameObject prefabKey)
        {
            Pool pool = pools.Get(prefabKey);

            // Посмотреть на первый обьект в очереди.
            GameObject objectToSpawn = pool.ObjectPoolQueue.Peek();

            if (objectToSpawn.activeInHierarchy)
            {
                // Если объект включен (нельзя использовать)
                // И можно расширить пул
                if (pool.ShouldExpand)
                {
                    //То сделать новый объект
                    objectToSpawn = objectCreator.CreateNewObjectToPool(prefabKey, pool.PoolParent);
                }
            }
            else
            {
                // Если он выключен, то можно использовать.
                objectToSpawn = pool.ObjectPoolQueue.Dequeue();
            }

            objectToSpawn.transform.SetDefault();
            RecycleGameObject(objectToSpawn);
            objectToSpawn.SetActive(true);
            OnObjectSpawn(objectToSpawn);

            pool.ObjectPoolQueue.Enqueue(objectToSpawn);

            return(objectToSpawn);
        }
示例#2
0
        private Queue <GameObject> CreateNewPoolQueue(PoolData poolData, Transform parentTransform)
        {
            Queue <GameObject> objectPool = new Queue <GameObject>();

            for (int i = 0; i < poolData.size; i++)
            {
                GameObject NewObjectToPool = objectCreator.CreateNewObjectToPool(poolData.prefab, parentTransform);
                objectPool.Enqueue(NewObjectToPool);
            }

            return(objectPool);
        }