한국어English日本語简体中文繁體中文DeutschไทยTiếng ViệtРусскийPortuguês (Brasil)EspañolBahasa Indonesia

Анатомия игровых лагов › L1 Процесс игрового клиента

Лавина догоняющих шагов при фиксированном таймстепе Fixed-timestep catch-up / spiral of death

ID причины cg-fixed-step · Основной ответственный Команда разработки · Разработка клиента

Открыть карточку в основной версии с иллюстрациями и экспериментами →

После одной остановки игра разом досчитывает накопившиеся шаги и из-за этого снова отстаёт.

Почему Симуляция идёт с фиксированным шагом, и игра один раз останавливается → Следствие Накопившиеся шаги считаются разом в одном кадре → На экране Долгие кадры идут один за другим, и картинка скачет, или срабатывает лимит, и мир замедляется

Симптомы
Микрофризы, Перемотка, Слоумо
Факторы
Остановка
У кого
Только у меня
Когда
Изредка, случайно, При наплыве игроков
Ответственные
Основной ответственный Команда разработки · Разработка клиента
Команда разработки: задачи
Ограничить число догоняющих шагов за кадр, остаток времени закрывать интерполяцией.
На графике
Случайные всплески · время кадра, число фиксированных шагов за кадр
Где смотреть
В профайлере development-сборки смотреть вместе время кадра и число фиксированных шагов за кадр (в Unity число маркеров фазы FixedUpdate, например FixedBehaviourUpdate)
Подтверждает
После одного долгого кадра идёт череда долгих кадров с несколькими шагами в каждом, а при достижении лимита (Maximum Allowed Timestep в Unity) игровое время течёт медленнее реального
Опровергает
Если долгий кадр одиночный, это «Всплески времени кадра» или «Сборка мусора на клиенте»
Чем проверить
Нужны логи и метрики игрового сервера или клиента
Подробнее
Типичный пример фиксированного шага: физика Unity (FixedUpdate), по умолчанию 0,02 с, то есть 50 раз в секунду. Верхний предел для догоняющих шагов задаёт параметр Maximum Allowed Timestep в настройках Time (максимальное время, которое можно догнать за один кадр, по умолчанию около 0,33 с). Если кадр длиннее, лишнее время отбрасывается, и игровые часы на столько же отстают от реальных.

Источники

  1. Set fixed timestep to optimize physics simulation frequency Unity
    Fixed Timestep по умолчанию 0,02 с (50 раз в секунду). Если кадр долгий, за один кадр выполняется несколько шагов физики и нагрузка растёт
  2. Handling variation in time Unity
    Maximum Allowed Timestep по умолчанию 1/3 с (0,3333333): даже если игра простояла 1 секунду, игровое время продвинется только на 0,333 с. Этот предел разрывает порочный круг, когда догоняющие шаги снова замедляют игру
  3. Profiler markers reference Unity
    FixedBehaviourUpdate: участок выполнения MonoBehaviour.FixedUpdate, маркеры физики вызываются в фазе FixedUpdate

Смотрите также

Тот же слой: L1 Процесс игрового клиента

Причины с тем же симптомом (Микрофризы) на других слоях

Карточка в основной версии с иллюстрациями и экспериментами