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

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

Divergência na predição do cliente Prediction mismatch / reconciliation

ID da causa cg-predict · Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)

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

Seu cliente mostra o movimento antes da confirmação; se o servidor calcular de outro jeito, seu personagem é puxado.

Por quê O cliente move o personagem antes da confirmação do servidor (predição) → Efeito O servidor calcula colisão, velocidade de movimento ou buffs de outro jeito, ou não recebe o comando → Na tela Quando a confirmação chega, seu personagem é puxado para trás

Sintomas
Rubber banding
Fatores
Perda de pacotes, Latência
Quem é afetado
Só eu
Quando
Em movimento ou ao trocar de mapa, Aleatoriamente, de vez em quando
Responsável
Responsável principal Desenvolvimento do cliente (Equipe de desenvolvimento) · Também envolvidos Desenvolvimento do servidor (Equipe de desenvolvimento)
O que fazer (Equipe de desenvolvimento)
Cliente: usar o mesmo código de movimento do servidor, enviar os inputs em duplicidade, corrigir de forma suave. Servidor: usar o mesmo código de movimento do cliente, descartar pelo número do input os inputs que chegam duplicados e processar cada um só uma vez.
Números de referência
A distância do puxão é “tempo de divergência × velocidade de movimento”. Basta perder alguns comandos para dar 1–3 m.
No gráfico
Picos aleatórios · Número de reconciliações com o servidor (falhas de predição)
Onde olhar
Registrar quantas correções de posição o servidor enviou e a distância corrigida. No Unreal, as correções ClientAdjustPosition do servidor; no Unity Netcode for Entities, quantas vezes a predição falhou e foi revertida e recalculada
Confirma se
As correções se concentram nos horários dos reports de rubber banding, e correções grandes se repetem com certos buffs, terrenos ou skills de movimento
Descarta se
Correções concentradas só nos momentos de muita perda: aponta para perda dos pacotes de input (conexão). Sem correções, mas com outros personagens parecendo puxados: “Extrapolação excessiva (dead reckoning)”
Como verificar
Exige logs e métricas do servidor ou do cliente do jogo

Fontes

  1. Introduction to prediction (Netcode for Entities 6.5) Unity
    Cliente e servidor fazem a predição com o mesmo código de simulação; se o resultado diverge do estado do servidor (falha de predição), o cliente reverte e recalcula, e a correção fica visível
  2. Use the command stream to handle user inputs (Netcode for Entities 6.5) Unity
    Para cobrir a perda de pacotes, o input mais recente é enviado junto com os inputs dos últimos ticks, em duplicidade
  3. Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
    O cliente se move primeiro e o servidor reproduz o mesmo movimento; se a posição diverge, corrige com ClientAdjustPosition e reaplica os movimentos salvos

Veja também

Mesma camada: L1 Processo do jogo no cliente

Mesmo sintoma (Rubber banding) em outras camadas

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