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

Guia do Lag em Jogos › L1 Processo do jogo no cliente

Espiral de recuperação do timestep fixo Fixed-timestep catch-up / spiral of death

ID da causa cg-fixed-step · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)

Abrir o card interativo, com figuras e simulações →

Depois de uma parada, o jogo tenta fazer de uma vez os cálculos atrasados e, por causa desse cálculo, atrasa de novo.

Por quê A simulação do jogo roda em intervalos fixos e, em algum momento, para → Efeito Os passos atrasados são calculados todos em um só frame → Na tela Uma sequência de frames longos causa picos ou, ao bater no limite, o jogo entra em câmera lenta

Sintomas
Engasgos, Avanço rápido, Câmera lenta
Fatores
Paralisação
Quem é afetado
Só eu
Quando
Aleatoriamente, de vez em quando, Quando junta muita gente
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Limitar a recuperação por frame, tratar o tempo que sobra com interpolação.
No gráfico
Picos aleatórios · Frame time, passos fixos por frame
Onde olhar
Ver no profiler da build de desenvolvimento quantas vezes o passo fixo rodou em um frame (no Unity, o número de marcadores da fase FixedUpdate, como FixedBehaviourUpdate) junto com o frame time
Confirma se
Depois de um frame longo vem uma sequência de frames longos que rodam vários passos e, ao bater no limite (Maximum Allowed Timestep no Unity), o tempo do jogo passa mais devagar que o real
Descarta se
Frame longo isolado, que não se repete: “Picos de frame time” ou “Coleta de lixo (GC) no cliente”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo
Saiba mais
A física do Unity (FixedUpdate) é o exemplo típico de passo fixo (0,02 s por padrão, 50 vezes por segundo). O Maximum Allowed Timestep das configurações de Time (o tempo máximo que um frame pode recuperar, cerca de 0,33 s por padrão) é o limite de recuperação. Se um frame passar disso, o tempo excedente é descartado, e o relógio do jogo fica atrasado em relação ao tempo real na mesma medida.

Fontes

  1. Set fixed timestep to optimize physics simulation frequency Unity
    Fixed Timestep padrão de 0,02 s (50 vezes por segundo); com frames longos, a física roda vários passos em um frame e a carga aumenta
  2. Handling variation in time Unity
    Maximum Allowed Timestep padrão de 1/3 s (0,3333333): mesmo com 1 s de parada, o tempo do jogo avança só 0,333 s; é o limite que impede o ciclo vicioso em que os passos de recuperação deixam tudo ainda mais lento
  3. Profiler markers reference Unity
    FixedBehaviourUpdate: trecho de execução de MonoBehaviour.FixedUpdate; os marcadores de física são chamados na fase FixedUpdate

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Engasgos) em outras camadas

Ver o card interativo, com figuras e simulações