Вступить в клуб →
средняявопросC# и жизненный цикл Unity

На паузе корутина награды не доходит до конца

Показ окна с наградой запускается корутиной:

IEnumerator ShowRewardDelayed()
{
    yield return new WaitForSeconds(2f);
    _rewardPopup.Show();
}

Окно паузы ставит Time.timeScale = 0f. Тестировщики нашли баг: если открыть паузу сразу после старта корутины, окно награды не появляется вообще, пока паузу не снимут. Объект с корутиной при этом активен и не уничтожается. Почему?

  • При timeScale = 0 у объектов перестаёт вызываться Update, а корутины продвигаются именно из него, поэтому выполнение замирает до снятия паузы
  • Корутина останавливается в момент открытия окна паузы, потому что пауза перехватывает управление интерфейсом: её надо перезапускать после снятия паузы
  • WaitForSeconds отсчитывает игровое время, а при timeScale = 0 оно стоит: нужно ожидание по реальному времени
  • Корутина запущена не на том компоненте: ожидание секунд отсчитывается только на объекте с активной камерой, на остальных объектах оно зависает

🔒 Проверка ответа — для участников клуба

  • Проверка ответа
  • Подсказка, если застряли
  • Разбор с объяснением, почему так
  • Прогресс по всем задачам и виртуальные собеседования
Зарегистрироваться →

Регистрация занимает минуту

Другие задачи раздела