Проверяет понимание природы корутин и того, как Unity управляет их выполнением.
Coroutine — это метод, который выполняется частями между кадрами, используя yield. Unity сама вызывает корутины в PlayerLoop. Они привязаны к MonoBehaviour, потому что Unity должна знать, к какому игровому объекту относится корутина и как управлять её жизненным циклом. Если объект отключён или уничтожен, корутина тоже должна остановиться. Это обеспечивает естественную синхронизацию с игровым миром.
Определение: Coroutine — это метод, который может приостанавливать выполнение (yield) и продолжать его в следующих кадрах.
Пример:
IEnumerator Flash()
{
sprite.enabled = false;
yield return new WaitForSeconds(0.2f);
sprite.enabled = true;
}
Coroutine не создаёт новый поток. Это всего лишь «растянутая во времени» функция.
Каждый кадр:
Unity проверяет состояния активных корутин
вызывает следующий шаг, если время пришло
yield return сообщает Unity, когда продолжитьUnity контролирует паузы:
WaitForSeconds
WaitForEndOfFrame
WaitUntil
null (ждать следующий кадр)
Coroutine запускается через:
StartCoroutine(Foo());
MonoBehaviour является «хозяином» корутины.
Если GameObject выключается:
корутина останавливается автоматически
это предотвращает ошибки логики
Когда объект уничтожается:
Destroy(gameObject);
→ все его корутины прекращаются.
MonoBehaviour — часть main thread механики.
Unity не создаёт поток на каждую корутину.
Unity управляет корутинами через внутренние списки, привязанные к компонентам.
Корутину нельзя отправить в фоновый поток.
При ошибке выполнение корутины прекращается.
Статические корутины невозможны без обёртки.
плавные анимации
тайминги cutscene
задержки UI
эффекты
чтение файлов
тяжелые вычисления
сетевые запросы
Coroutine — это последовательность действий, выполняемых в разные кадры. Они работают только через MonoBehaviour, потому что Unity должна синхронизировать их с объектами сцены и управлять их жизненным циклом.