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); }
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); }