TGViewer
Game Development | YeaHub Game Development | YeaHub @yeahub_game_dev · 370 subscribers
Post #493 120
Как работают Update и LateUpdate

Завершаем цикл постов про методы Update. Сегодня разберём, как ведут себя Update и LateUpdate, если игра подвисает.

Эти методы работают очень просто: кадр вызвался → методы вызвались.

Они не пытаются “догнать” пропущенные вызовы, как это делает FixedUpdate.
То есть один кадр = один вызов метода.

Теоретически при длительном зависмании нас может спасти Time.deltaTime, потому что он учитывает время между кадрами. Но тут есть важный нюанс.

У Time.deltaTime есть ограничение - Time.maximumDeltaTime (в инспекторе это Maximum Allowed Timestep).

Это означает, что значение Time.deltaTime никогда не будет больше ~0.333 секунды.

Подробнее можно почитать в документации:
https://docs.unity3d.com/ru/530/Manual/TimeFrameManagement.html
https://docs.unity3d.com/6000.3/Documentation/Manual/time-handling-variations.html

Как это выглядит на практике

Вспомним простой код движения:

private void Update()
{
transform.position += Vector3.forward * 10f * Time.deltaTime; // 10 м/с
}


Если игра подвиснет на 2 секунды, то Time.deltaTime всё равно будет равен 0.33.

В итоге - ожидали пройти 20 метров, а фактически пройдём 3.3 метра. Потому что deltaTime ограничен.

Можно ли это исправить?

Технически - да.

Можно использовать:

• Time.unscaledDeltaTime - deltaTime без ограничений
• Time.realtimeSinceStartup - реальное время с момента запуска приложения

Но это почти всегда плохая идея для игровой логики.

Если игра подвиснет, объект может “телепортироваться” на большое расстояние.

Кроме этого:
• физика не будет успевать за объектом
• логика станет сложнее
• нагрузка на CPU может увеличиться

По сути, можно раскрутить “спираль смерти”-— когда из-за лагов система начинает лагать ещё сильнее.

Когда это всё-таки имеет смысл


Использовать unscaledDeltaTime имеет смысл там, где важно реальное время, а не игровое.

Например, для таймера UI:

private void Update()
{
_uiTimer += Time.unscaledDeltaTime;
UpdateUITimerText(_uiTimer);
}


А что насчёт LateUpdate?

LateUpdate работает по тем же принципам, что и Update.
Единственная разница - порядок вызова. Сначала Update, потом LateUpdate.

То есть всё, что мы разобрали про Update (ограничение deltaTime, поведение при фризах и т.д.), полностью применимо и к LateUpdate.
Если понимать эти механизмы под капотом, можно без труда отвечать на каверзные вопросы на собеседованиях и, что важнее, писать более предсказуемую игровую логику.

🚀 Пост Guru Unity: @Minerope
Unity3D Unity - Руководство: Time and Framerate Management The Unity Manual helps you learn and use the Unity engine. With the Unity engine you can create 2D and 3D games, apps and experiences.
More from @yeahub_game_dev
  1. Oct 8, 2026#Собес #lost #update 🤔 Что такое lost update и при каких условиях он возникает? 💬 Кратко…
  2. Oct 7, 2026#Собес #Task #ThreadPool #async 🤔 Как Task использует ThreadPool? 💬 Кратко: Task использ…
  3. Oct 5, 2026#Собес #memory_layout #data_alignment #padding 🤔 Какие есть исключения из правил хранения…
  4. Oct 2, 2026#tool #гит 📚 Хочешь изучить Git, не рискуя своей локальной установкой? Теперь можно запус…
  5. Oct 1, 2026#Собес #docker_rm #container #stop 🤔 Как удалить Docker-контейнер? 💬 Кратко: Чтобы удали…
  6. Sep 30, 2026#Собес #ContinueWith #Task #async 🤔 Что такое ContinueWith и для чего он используется? 💬…
Threads Profile ViewerView any public Threads profile without an account.Open ThreadLook →Writing with AI? Make it sound human.Metric37 rewrites AI drafts so they read naturally. Free AI detector, 1,500 words free.Try Metric37 →