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

Libro blanco del lag en juegos › L1 Proceso del juego en el cliente

Error de predicción en el cliente Prediction mismatch / reconciliation

ID de la causa cg-predict · Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)

Abrir la ficha interactiva con gráficos y simulaciones →

Tu cliente mueve a tu personaje antes de tener respuesta del servidor; si el servidor lo calcula de otra forma, tu personaje es arrastrado hacia atrás.

Por qué El cliente mueve al personaje antes de la confirmación del servidor (predicción) → Efecto El servidor calcula de otra forma las colisiones, la velocidad de movimiento o los buffs, o no recibe los comandos → En pantalla Cuando llega la confirmación, tu personaje es arrastrado hacia atrás

Síntomas
Rubber banding
Factores
Pérdida de paquetes, Latencia
A quién afecta
Solo yo
Cuándo
Al moverse o cambiar de zona, De vez en cuando, al azar
Responsable
Responsable principal Desarrollo de cliente (Equipo de desarrollo) · También Desarrollo de servidor (Equipo de desarrollo)
Tareas (Equipo de desarrollo)
Cliente: usar el mismo código de movimiento que el servidor, enviar los inputs por duplicado, aplicar las correcciones con suavidad. Servidor: usar el mismo código de movimiento que el cliente, filtrar por número de input los inputs duplicados y procesarlos una sola vez.
Cifras de referencia
La distancia que retrocede tu personaje es “tiempo de desfase × velocidad de movimiento”. Basta con que se pierdan unos pocos comandos para que sea de 1–3 m.
En el gráfico
Picos aleatorios · Correcciones del servidor (errores de predicción)
Dónde mirar
Registrar cuántas correcciones de posición envía el servidor y de qué distancia. En Unreal, las correcciones ClientAdjustPosition del servidor; en Unity Netcode for Entities, contar cuántas veces se revirtió y se recalculó por error de predicción
Se confirma si
Las correcciones se concentran en los momentos de los reportes de rubber banding, y la distancia de corrección es grande una y otra vez con ciertos buffs, terrenos o habilidades de movimiento
Se descarta si
Si las correcciones solo se concentran cuando hay mucha pérdida, apunta a pérdida de los paquetes de input (la conexión). Si no hay correcciones y solo los demás personajes parecen arrastrados: “Extrapolación excesiva (dead reckoning)”
Se verifica con
Requiere logs y métricas del servidor o el cliente del juego

Fuentes

  1. Introduction to prediction (Netcode for Entities 6.5) Unity
    El cliente y el servidor predicen con el mismo código de simulación; si el resultado difiere del estado del servidor (error de predicción), se revierte y se recalcula, y la corrección se ve
  2. Use the command stream to handle user inputs (Netcode for Entities 6.5) Unity
    Para cubrir la pérdida de paquetes, reenvía por duplicado los inputs de los ticks anteriores junto con el input más reciente
  3. Understanding Networked Movement in the Character Movement Component for Unreal Engine Epic Games
    El cliente se mueve primero y el servidor reproduce el mismo movimiento; si la posición difiere, corrige con ClientAdjustPosition y vuelve a aplicar los movimientos guardados

Ver también

Misma capa: L1 Proceso del juego en el cliente

Causas de otras capas con el mismo síntoma (Rubber banding)

Ver la ficha interactiva con gráficos y simulaciones