Цель: использовать сопрограммы для запуска цикла while и приостановки на определенные интервалы.

В этом примере мы собираемся создать Spawn Manager, а затем каждые 5 секунд создавать вражеские игровые объекты в случайных точках игрового экрана. Какой лучший способ сделать это, чем использовать сопрограмму?

Сначала создайте пустой игровой объект с именем Spawn Manager и сбросьте значения преобразования на 0. Затем создайте сценарий с именем SpawnManager. Перетащите скрипт на пустой игровой объект.

Откройте сценарий и создайте сопрограмму с именем SpawnRoutine и типом IEnumerator. В этом случае мы хотим создать цикл while, который работает бесконечно (как правило, это опасно), но поскольку мы также будем использовать ключевое слово yield, это позволит вашему компьютеру дышать. Использование ключевого слова yield требуется для типа IEnumerator.

Мы создаем новый Vector3 для хранения случайной позиции, которая будет назначена каждому врагу.

Затем создайте частное Serialized Field для вражеского префаба и перетащите вражеский префаб в поле через инспектор.

После этого мы создаем экземпляр вражеского префаба и подключаем его к posToSpawnVector3 без применения поворота. Завершите сопрограмму с помощью yield return new WaitForSeconds(5.0f). Это ждет 5 реальных секунд, а затем продолжает цикл.

Наконец, чтобы мы могли запустить сопрограмму, нам нужно использовать специальный метод с именем StartCoroutine() и передать нашу сопрограмму внутри него вот так.

Теперь в нашей игре враг появляется в случайной точке каждые 5 секунд!