Всем привет. Пишу Space Shooter. В скрипте Gamecontroller есть couroutine, отвечающий за респавн противников.
IEnumerator SpawnEnemies() {
yield return new WaitForSeconds(timeBeforeSpawning);
while(true) {
if (currentNumberOfEnemies <= 1) {
waveNumber++;
waveText.text = "Волна: " + waveNumber;
float randDirection;
float randDistance;
for (int i = 0; i < enemiesPerWave; i++) {
randDistance = Random.Range (10, 25);
randDirection = Random.Range (0, 360);
float posX = this.transform.position.x + (Mathf.Cos ((randDirection) * Mathf.Deg2Rad) * randDistance);
float posY = this.transform.position.y + (Mathf.Cos ((randDirection) * Mathf.Deg2Rad) * randDistance);
Instantiate(enemy, new Vector3(posX, posY, 0), this.transform.rotation);
currentNumberOfEnemies++;
yield return new WaitForSeconds(timeBetweenEnemies);
}
}
yield return new WaitForSeconds (timeBeforeWaves);
}
}
В другом скрипте, который контролирует игрока, есть строчка, останавливающая выполнение couroutine, когда у игрока заканчиваются очки здоровья.
if (hp == 0)
{
GameOverText.enabled = true;
GameController gameController = GameObject.FindGameObjectWithTag("GameController").GetComponent("GameController") as GameController;
gameController.StopAllCoroutines();
}
В случае, если всех противников в волне убивает лазер (стандартный сценарий их смерти), все идет хорошо. Но если хотя бы один противник разбивается об игрока, независимо от количества здоровья игрока, спавн противников прекращается. Подскажите, плиз, куда копать?
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости