public IEnumerator SpawnEnemies() { while (playerController.IsAlive) { yield return(new WaitForSeconds(spawnTime)); for (int i = 0; i < enemyInfo.Count; i++) { EnemiesController retrievedEnemy = GetPooledEnemy(enemyInfo[i].typeEnemy); if (retrievedEnemy != null) { retrievedEnemy.transform.position = enemyInfo[i].spawnPoint.position; retrievedEnemy.gameObject.SetActive(true); } } } }
public void CreatePool() { enemiesByTypes = new List <EnemiesByType>(); // лист врагов по типам for (int i = 0; i < enemyInfo.Count; i++) // проходим по листу данных врагов { EnemiesByType enemyByType = new EnemiesByType(enemyInfo[i].typeEnemy); // выдергиваем из листа данных о врагах элементы(слон идет первый) и получаем на него ссылку for (int j = 0; j < enemyInfo[i].poolCount; j++) // вторим циклом добаляем enemiesContoller { EnemiesController enemiesController = Instantiate(enemyInfo[i].enemyPrefab, enemyInfo[i].spawnPoint.position, Quaternion.identity, enemiesParent); enemiesController.gameObject.SetActive(false); enemiesController.Init(playerController, OnEnemyDieHandler); // инициализация данного объекта enemyByType.enemiesControllers.Add(enemiesController); // добавили в лист данных объектов данного типа но не больше poolCount } enemiesByTypes.Add(enemyByType); } }
public EnemiesController GetPooledEnemy(TypeEnemy typeEnemy) // выдергиваем нужный на объект по типу (допустим нам нужен слон) { for (int i = 0; i < enemiesByTypes.Count; i++) // пробегаемся по списку создаанных объектов разного типа { if (enemiesByTypes[i].typeEnemy == typeEnemy) // и если это слон { for (int j = 0; j < enemiesByTypes[i].enemiesControllers.Count; j++) // проходим по листу слонов { if (!enemiesByTypes[i].enemiesControllers[j].gameObject.activeSelf) { return(enemiesByTypes[i].enemiesControllers[j]); // вернуть первого слона из списка объектов(контроллеров) типа слона } } EnemiesController enemiesController = Instantiate(enemyInfo[i].enemyPrefab, enemyInfo[i].spawnPoint.position, Quaternion.identity, enemiesParent); enemiesController.gameObject.SetActive(false); enemiesController.Init(playerController, OnEnemyDieHandler); enemiesByTypes[i].enemiesControllers.Add(enemiesController); return(enemiesController); } } return(null); }