Логотип YeaHub

База вопросов

Собеседования

Тренажёр

База ресурсов

Обучение

Навыки

Задачи

Войти

Выбери, каким будет IT завтра — вместе c нами!

YeaHub — это полностью открытый проект, призванный объединить и улучшить IT-сферу. Наш исходный код доступен для просмотра на GitHub. Дизайн проекта также открыт для ознакомления в Figma.

© 2026 YeaHub

AI info

Карта сайта

Документы

Медиа

Назад
Вопрос про Unity : coroutine

Что такое Coroutine и почему корутины привязаны к MonoBehaviour?

Проверяет понимание природы корутин и того, как Unity управляет их выполнением.

Короткий ответ

Coroutine — это метод, который выполняется частями между кадрами, используя yield. Unity сама вызывает корутины в PlayerLoop. Они привязаны к MonoBehaviour, потому что Unity должна знать, к какому игровому объекту относится корутина и как управлять её жизненным циклом. Если объект отключён или уничтожен, корутина тоже должна остановиться. Это обеспечивает естественную синхронизацию с игровым миром.

Длинный ответ

Что такое Coroutine

Определение: Coroutine — это метод, который может приостанавливать выполнение (yield) и продолжать его в следующих кадрах.

Пример:

IEnumerator Flash()
{
    sprite.enabled = false;
    yield return new WaitForSeconds(0.2f);
    sprite.enabled = true;
}

Coroutine не создаёт новый поток. Это всего лишь «растянутая во времени» функция.


Как работает Coroutine внутри Unity

1. Unity вызывает их в пределах PlayerLoop

Каждый кадр:

  • Unity проверяет состояния активных корутин

  • вызывает следующий шаг, если время пришло

2. yield return сообщает Unity, когда продолжить

Unity контролирует паузы:

  • WaitForSeconds

  • WaitForEndOfFrame

  • WaitUntil

  • null (ждать следующий кадр)

3. Управление жизненным циклом через MonoBehaviour

Coroutine запускается через:

StartCoroutine(Foo());

MonoBehaviour является «хозяином» корутины.


Почему корутины привязаны к MonoBehaviour

1. Синхронизация с GameObject

Если GameObject выключается:

  • корутина останавливается автоматически

  • это предотвращает ошибки логики

2. Контроль жизненного цикла

Когда объект уничтожается:

Destroy(gameObject);

→ все его корутины прекращаются.

3. Коррутины выполняются в главном потоке

MonoBehaviour — часть main thread механики.
Unity не создаёт поток на каждую корутину.

4. PlayerLoop знает про MonoBehaviour

Unity управляет корутинами через внутренние списки, привязанные к компонентам.


Ограничения корутин

1. Нельзя выполнять тяжёлую работу

Корутину нельзя отправить в фоновый поток.

2. Нельзя ловить исключения за пределами одного шага

При ошибке выполнение корутины прекращается.

3. Нельзя вызывать вне контекста MonoBehaviour

Статические корутины невозможны без обёртки.


Практические сценарии

Подходят:

  • плавные анимации

  • тайминги cutscene

  • задержки UI

  • эффекты

Не подходят:

  • чтение файлов

  • тяжелые вычисления

  • сетевые запросы


Краткий вывод

Coroutine — это последовательность действий, выполняемых в разные кадры. Они работают только через MonoBehaviour, потому что Unity должна синхронизировать их с объектами сцены и управлять их жизненным циклом.

  • Аватар

    Unity Guru

    Oleg Miroshkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.

Уровень

  • Рейтинг:

    5

  • Сложность:

    4

Навыки

  • Unity

    Unity

Ключевые слова

#coroutine

Подпишись на Game Developer в телеграм

  • Аватар

    Unity Guru

    Oleg Miroshkin

    Guru – это эксперты YeaHub, которые помогают развивать комьюнити.