Yield Instruction

Автор: Дмитрий Прокопьев

YieldInstruction это базовый класс для всех yield инструкций. Если класс наследуется от YieldInstruction, то его можно передать в yield return.

Мы можем самостоятельно реализовать такой класс или воспользоваться уже существующими.

Какие yield инструкции уже реализованы в Unity?

yield return new WaitForEndOfFrame();

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

yield return new WaitForFixedUpdate();

Ожидает следующий вызов FixedUpdate.

WaitForSeconds (float t)

yield return new WaitForSeconds(1f);

Ожидает пока пройдет t секунд c момента завершения текущего кадра. Время считается с коэффициентом Time.timeScale.

Важно. Так как корутины выполняются в основном цикле обновлений кадров (Update), между вызовами пройдет не точно t секунд. Выполнение корутины продолжится в первом кадре после прохождения t секунд c момента окончания текущего кадра.

Ожидает пока пройдет t секунд c момента завершения текущего кадра. Время считается без коэффициентов, поэтому совпадает с реальным. В остальном этот класс работает как WaitForSeconds.

WaitUntil (Func<Bool> func)

Принимает в себя делегат, возвращающий bool, и ожидает момента, когда он вернет true. До этого момента делегат вызывается каждый кадр.

WaitWhile (Func<Bool> func)

Принимает в себя делегат, возвращающий bool, и ожидает момента, когда он вернет false. До этого момента делегат вызывается каждый кадр.

null

Мы можем вернуть null, если хотим продолжить выполнение корутины в следующем кадре без особых условий

Coroutine

Сами корутины тоже могут выступать в роли yield инструкции:

Таким образом можно дождаться окончания другой корутины и только потом продолжить выполнить текущую

break

При необходимости выполнение корутины можно завершить вручную:

После такой инструкции корутина завершится.

Last updated

Was this helpful?