Проще говоря, они работают как цикл обновления, но вы можете сказать ему «Подождать» заданное время, прежде чем снова запускаться. Вы также можете динамически запускать, приостанавливать и останавливать корутины в коде.

Это позволяет нам делать несколько мощных вещей, но все они вращаются вокруг «Ожидания».

Подождите, пока пройдет x секунд, дождитесь завершения загрузки, подождите в каждом кадре, пока не произойдет x. Много способов их использования.

Чтобы продемонстрировать это, мы собираемся использовать Coroutine для создания простого бесконечного генератора.

Пример сопрограммы — бесконечное порождение

Это «основной» код Coroutine, который нам нужен, чтобы иметь бесконечный генератор, который работает с заданной скоростью появления (3 секунды в этом примере).

Таким образом, шаги для Coroutine:

  1. Мы создаем функцию возвращаемого типа IEnumerator
  2. Мы помещаем yield return для типа, который мы хотим
  3. Необязательно: мы ставим while(true), чтобы сопрограмма работала вечно.
  4. Затем мы вызываем StartCoroutine(‹FunctionName›)

Теперь сопрограмма будет работать без задержки (правда), она будет запускаться только один раз. Кроме того, нам не нужно вызывать StartCoroutine в меню «Пуск», мы можем вызывать его где угодно, например, в «PlayerHit» мы устанавливаем «StayInvincibleFor(3f)» для непобедимости в стиле ретро-игры.

Отсюда нам просто нужно сделать то, что было описано в моей статье Создание объектов.

  • Сохраните префаб, который мы хотим создать
  • Дайте ему позицию возрождения
  • Опционально контейнер порожденного объекта как написано здесь

Полный пример кода