El multijugador ha supuesto al menos el triple de tiempo de desarrollo y de problemas de los que esperaría al crear Sunderstar sin él. Incluso un juego de disparos espacial relativamente sencillo se complica cuando el cliente y el servidor no coinciden en dónde debería estar una nave o un proyectil.

Los problemas se veían en acciones básicas. Esperar actualizaciones del servidor retrasaba la respuesta a los controles de movimiento. En las colisiones, las diferencias entre cliente y servidor podían arrastrar la nave hacia atrás hasta una posición corregida. Las actualizaciones tardías dificultaban mantener fluido el movimiento remoto.

Los disparos tenían problemas similares. Con la dispersión del arma, no era fiable emparejar el disparo local inmediato con el proyectil del servidor. Corregirlo hacia una posición antigua del servidor podía hacerlo saltar hacia atrás o parecer que cambiaba de velocidad. Los efectos de impacto también debían aparecer a tiempo sin volver a destellar al llegar la confirmación del servidor.

Cambié la nave local para que prediga el movimiento de inmediato con los mismos cálculos que el servidor y corrija las diferencias cuando llegan sus actualizaciones. Las otras naves se mueven suavemente entre las posiciones recibidas, con una estimación limitada de su movimiento si las actualizaciones se retrasan.

Las colisiones también necesitan predicción. El cliente ahora calcula cómo responde tu nave a un asteroide o a otra nave usando datos de colisión del servidor. Solo tu nave se mueve localmente. Las pequeñas correcciones de posición se suavizan; los cambios grandes, como los teletransportes, se aplican al instante.

El proyectil visual ahora adopta la dirección del servidor sin saltar hacia atrás y mantiene una velocidad constante. Los efectos de impacto aparecen localmente y se suprimen los efectos equivalentes del servidor para que el mismo golpe no destelle dos veces. El servidor sigue decidiendo los impactos y el daño.

También hice que la aparición de proyectiles, los fogonazos, el sonido y la reproducción usen la misma posición en la boca del cañón. Cambiar la predicción del movimiento incluso destapó un error de propiedad de bots en modo Host que hubo que corregir.

Las comprobaciones automáticas han pasado y las métricas ya han mejorado en la simulación de red de Unity. Aún tengo que verificar esas mejoras en una sesión real por internet con un servidor dedicado.

Si has trabajado en multijugador, ¿qué función aparentemente sencilla te llevó más tiempo dejar bien?