После одной остановки игра разом досчитывает накопившиеся шаги и из-за этого снова отстаёт.
Почему Симуляция идёт с фиксированным шагом, и игра один раз останавливается → Следствие Накопившиеся шаги считаются разом в одном кадре → На экране Долгие кадры идут один за другим, и картинка скачет, или срабатывает лимит, и мир замедляется
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Ограничить число догоняющих шагов за кадр, остаток времени закрывать интерполяцией.
На графике
Случайные всплески · время кадра, число фиксированных шагов за кадр
Где смотреть
В профайлере development-сборки смотреть вместе время кадра и число фиксированных шагов за кадр (в Unity число маркеров фазы FixedUpdate, например FixedBehaviourUpdate)
Подтверждает
После одного долгого кадра идёт череда долгих кадров с несколькими шагами в каждом, а при достижении лимита (Maximum Allowed Timestep в Unity) игровое время течёт медленнее реального
Опровергает
Если долгий кадр одиночный, это «Всплески времени кадра» или «Сборка мусора на клиенте»
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Подробнее
Типичный пример фиксированного шага: физика Unity (FixedUpdate), по умолчанию 0,02 с, то есть 50 раз в секунду. Верхний предел для догоняющих шагов задаёт параметр Maximum Allowed Timestep в настройках Time (максимальное время, которое можно догнать за один кадр, по умолчанию около 0,33 с). Если кадр длиннее, лишнее время отбрасывается, и игровые часы на столько же отстают от реальных.
Handling variation in timeUnity Maximum Allowed Timestep по умолчанию 1/3 с (0,3333333): даже если игра простояла 1 секунду, игровое время продвинется только на 0,333 с. Этот предел разрывает порочный круг, когда догоняющие шаги снова замедляют игру
Profiler markers referenceUnity FixedBehaviourUpdate: участок выполнения MonoBehaviour.FixedUpdate, маркеры физики вызываются в фазе FixedUpdate