Любой, кто программировал в Unity, знает, что рано или поздно вы накопите значительный объем кода в своей функции обновления. В конце концов, Обновление - это функция, вызываемая каждым кадром, что делает ее чрезвычайно полезным инструментом для программирования! Однако иногда нам требуется больше точности и настроек, чем позволяет Update. Иногда нам нужны сопрограммы.

Что такое сопрограммы?

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

Хороший способ запомнить их использование - подумать о слове рутина и о том, что оно означает в реальном мире - последовательность регулярно выполняемых действий.

Синтаксис

Тип возврата функции будет IEnumerator, так Unity делит выполнение функции на несколько кадров.

Как и любой обычной функции, сопрограмме можно назначить параметры. Переменные сохранят свое значение на протяжении всей сопрограммы.

У сопрограмм есть специальный оператор, известный как yield, который возвращает выполнение функции. Это то, что позволяет вам сделать паузу.

Доходность часто сопровождается параметром WaitForSeconds, который позволяет указать, как долго ждать.

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

Завершенная сопрограмма должна всегда вызываться из метода Start.

Комбинирование сопрограммы с циклом while - правильный способ создания бесконечных циклов

Поскольку сопрограммы позволяют программе дышать, вы можете эффективно создать сопрограмму, которая будет работать вечно без сбоев программы g.

Однако вы можете уточнить детали.

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

Пример кода:

В этом примере враги будут появляться в случайных местах в пределах экрана. Условие _stopSpawning ложно, если только игрок не умирает или игра не выиграна. Это означает, что эта процедура будет выполняться только пока игрок жив или игра еще активна, в противном случае она не остановится.

Как это выглядит:

Если вам интересно, почему существует преобразование для обработки родительского элемента в объекте, это уловка, используемая для освобождения иерархии при порождении множества игровых объектов. Об этом я расскажу в своей следующей статье!