Проще говоря, они работают как цикл обновления, но вы можете сказать ему «Подождать» заданное время, прежде чем снова запускаться. Вы также можете динамически запускать, приостанавливать и останавливать корутины в коде.
Это позволяет нам делать несколько мощных вещей, но все они вращаются вокруг «Ожидания».
Подождите, пока пройдет x секунд, дождитесь завершения загрузки, подождите в каждом кадре, пока не произойдет x. Много способов их использования.
Чтобы продемонстрировать это, мы собираемся использовать Coroutine для создания простого бесконечного генератора.
Пример сопрограммы — бесконечное порождение
Это «основной» код Coroutine, который нам нужен, чтобы иметь бесконечный генератор, который работает с заданной скоростью появления (3 секунды в этом примере).
Таким образом, шаги для Coroutine:
- Мы создаем функцию возвращаемого типа IEnumerator
- Мы помещаем yield return для типа, который мы хотим
- Необязательно: мы ставим while(true), чтобы сопрограмма работала вечно.
- Затем мы вызываем StartCoroutine(‹FunctionName›)
Теперь сопрограмма будет работать без задержки (правда), она будет запускаться только один раз. Кроме того, нам не нужно вызывать StartCoroutine в меню «Пуск», мы можем вызывать его где угодно, например, в «PlayerHit» мы устанавливаем «StayInvincibleFor(3f)» для непобедимости в стиле ретро-игры.
Отсюда нам просто нужно сделать то, что было описано в моей статье Создание объектов.
- Сохраните префаб, который мы хотим создать
- Дайте ему позицию возрождения
- Опционально контейнер порожденного объекта как написано здесь