Цель: деактивировать наш TripleShot Power Up через X секунд с помощью таймера, также известного как Coroutine.

Здесь у нас есть видеоигра, в которой мы собираем Power Up и деактивируем его через 5 секунд. Как это было сделано? Давайте углубимся в это.

В этой статье мы не будем углубляться в реализацию других возможностей, но если вы хотите проверить метод Instantition, нажмите ЗДЕСЬ.

Когда мы собираем Power Up, в сценарии проигрывателя событие OnTriggerEnter2D Unity в нашем сценарии Power Up вызывает метод, который активирует TripleShot и запускает StopsTripleShot Coroutine.

Теперь нам нужен таймер или сопрограмма, чтобы деактивировать TripleShot через 5 секунд.

Для этого мы создадим функцию, которая возвращает объект WaitForSeconds со значением float в секундах, которое остановится через определенное время, в данном случае после отключения нашего логического значения _isTripleShotEnabled, которое управляет нашей стрельбой.

Следуя этой логике, наш игрок будет стрелять снарядом TripleShot в течение 5 секунд, а затем, отключив его, снова выстрелит основным лазерным снарядом.

Это простая и эффективная реализация, которая позволяет нам решить, когда прекратить создание экземпляра нашего PowerUp!

Представьте, что по какой-то причине мы хотели бы снова активировать наш TripleShot, мы могли бы сделать это, добавив еще один yield return new WaitForSeconds(seconds);

С помощью этой последовательности таймеров мы можем установить любое отложенное поведение, которое сделает нашу жизнь проще благодаря сопрограммам.

БОНУС

Что, если бы мы захотели порождатьнекоторых врагов бесконечно, пока мы не закончим уровень, не загрузим сцену и т. д.?

Мы могли бы поменять местами true на логическую переменную и поколдовать, но решать вам!

Помните:вам всегда нужно запускать свою сопрограмму с помощью StartCoroutine(EnemySpawner()); в этом случае.

Примечания. Вы можете остановить сопрограмму с помощью StopCoroutine(). Сопрограмма также останавливается, когда GameObject, к которому она прикреплена, отключается с помощью SetActive(false).

Вы можете остановить все сопрограммы, работающие в текущем MonoBehaviour, с помощью StopAllCoroutines().