El enemigo invisible: la latencia#
Entre que pulsas una tecla y el servidor responde pasan milisegundos (el ping): 30 ms en buenas condiciones, 150+ en malas. Si el juego esperara esa ida y vuelta para reaccionar, el control sería intragable y los demás jugadores se verían dando saltos. Tres técnicas esconden el lag. Amplía lo visto en conceptos de multiplayer.
1. Interpolación: los DEMÁS se ven suaves#
El servidor manda las posiciones de los otros jugadores a intervalos (por ejemplo, 20 veces por segundo), no cada fotograma. Si dibujaras cada objeto en la última posición recibida, se verían a saltos.
La interpolación muestra a los otros jugadores un poquito en el pasado, moviéndolos suavemente entre las dos últimas posiciones recibidas. Cuesta un pelín de retraso visual (unos ms) a cambio de un movimiento fluido.
- Interpolación: dibujas entre dos posiciones conocidas (un poco en el pasado). Suave y seguro. Lo habitual.
- Extrapolación: adivinas la posición futura según la velocidad, cuando no ha llegado dato nuevo. Sin retraso, pero si el objeto cambia de dirección, falla y hay que corregir.
El NetworkTransform de Netcode ya interpola por ti (ver sincronizar estado).
2. Predicción del cliente: TÚ te mueves al instante#
Para tu propio personaje, esperar al servidor sería inaceptable. La predicción del lado cliente aplica tu input inmediatamente en local, asumiendo que el servidor estará de acuerdo. Tú te mueves sin lag; el servidor recibe tu input y hace lo mismo un poco después.
3. Reconciliación: el servidor tiene la última palabra#
¿Y si el servidor no está de acuerdo con tu predicción (chocaste con algo que tú no viste, o alguien te empujó)? Entonces manda su versión "oficial". La reconciliación corrige tu posición a la del servidor, idealmente sin que se note.
El cliente guarda un historial de sus inputs. Cuando el servidor confirma "en el input nº 120 estabas aquí", el cliente rebobina a ese punto y reproduce rápidamente los inputs posteriores (121, 122...) desde la posición corregida. Así corrige el error sin tirar el trabajo ya predicho. Bien hecho, el jugador no percibe la corrección. Es lo que hace que un shooter online se sienta instantáneo pese al ping.
Cómo encajan las tres#
| Situación | Técnica | Resultado |
|---|---|---|
| Ver a otros jugadores | Interpolación | Movimiento suave (con un mínimo retraso) |
| Mover tu personaje | Predicción del cliente | Respuesta inmediata, sin lag |
| El servidor discrepa | Reconciliación | Corrección disimulada |
El otro lado: lag compensation#
En un shooter, cuando disparas a un enemigo, en tu pantalla está en un sitio, pero por el lag el servidor lo ve un poco más adelante. La lag compensation hace que el servidor "rebobine" el mundo al momento en que tú disparaste para juzgar si acertaste. Es lo que evita el "le he dado clarísimo y no ha contado".
¿Tienes que programar todo esto?#
Interpolación, predicción y reconciliación son difíciles de implementar bien. La buena noticia: frameworks como Photon Fusion o Netcode for Entities traen predicción y reconciliación integradas; el NetworkTransform de Netcode ya interpola. Para muchos juegos (cooperativo, no competitivo), la interpolación de serie basta y no necesitas predicción/reconciliación. Añádelas solo si tu juego es rápido y competitivo. Ver la comparativa de soluciones.
Errores frecuentes#
- Esperar la respuesta del servidor para mover al propio jugador (control con lag).
- Dibujar a los demás en la última posición recibida sin interpolar (se ven a saltos).
- Implementar predicción a mano cuando el framework ya la ofrece.
- Meter predicción/reconciliación en un juego cooperativo que no lo necesita (complejidad inútil).
- Olvidar la lag compensation en un shooter y que "los disparos no cuenten".
Ponte a prueba#
Resumen#
El lag se esconde con tres técnicas: interpolación (los otros jugadores se ven suaves, un poco en el pasado), predicción del cliente (tu personaje reacciona al instante) y reconciliación (el servidor corrige tu predicción disimuladamente), más la lag compensation en shooters. Son difíciles de hacer bien: el NetworkTransform ya interpola, y frameworks como Fusion traen predicción integrada. Úsalas solo si tu juego es competitivo y rápido; para cooperativo, la interpolación de serie suele bastar.