Estoy trabajando en un juego móvil de Unity, al igual que una versión multijugador de Temple Run . Veo una latencia de red fluctuante (generalmente 200-500 ms) debido a la plataforma móvil.
Los dos personajes jugadores se muestran corriendo por el mismo camino y deben realizar acciones simples (saltar, deslizarse, encendido, etc.) para pasar obstáculos.
Cuando un mensaje llega tarde, el juego asume que el jugador remoto pasó un obstáculo. Esto generalmente funciona bien, pero en caso de que un jugador muera por un obstáculo, quiero que el jugador remoto parezca morir en el mismo obstáculo / posición que el jugador local. Debido a la latencia, el jugador remoto parece haber cruzado el obstáculo antes de que llegue el mensaje que anuncia su muerte.
¿Cómo puedo mantener los jugadores sincronizados?
Intenté mover el reproductor remoto de nuevo a la posición de muerte de los jugadores locales inmediatamente cuando llega el mensaje de muerte, se ve incómodo visualmente y podría generar otros problemas de sincronización.
fuente
Para complementar la respuesta de Anko, puede cambiar un poco el diseño de su juego agregando la consecuencia del obstáculo fallido después de la falla, por ejemplo, un salto fallido resulta en aterrizar en un charco de lodo que descalifica al jugador. De esta manera, el otro jugador nota el fracaso al ver al otro caer en el barro, mientras que el jugador que falla lo ve de inmediato.
Aquí hay una buena publicación de blog sobre este tema (no es tan reciente pero es bastante interesante): Gestión y sincronización del tiempo de Darrin West .
fuente
¿Es tan importante para el jugador local saber la posición exacta de la muerte del jugador remoto? Digamos que el jugador remoto no pudo saltar uno de tus obstáculos, y por lo tanto murió.
El jugador muerto vería su muerte de inmediato y continuaría desde el lugar del accidente. Nada mágico aquí.
El jugador local (el que sigue vivo y pateando) vería al jugador remoto pasar el obstáculo con éxito. Llegaría una notificación de muerte. El jugador remoto tropezaría con sus pies, se caería y se desvanecería lentamente. La próxima vez que conozca la posición del jugador remoto, el jugador se desvanecería en esa posición exacta, corriendo normalmente de nuevo. En tal configuración, los jugadores serían conscientes de la latencia, pero la latencia se representaría como un elemento del juego (tropezar) en lugar de aparecer y desaparecer de forma brusca.
Si la velocidad de los dos jugadores es constante, la trayectoria de carrera está predefinida y se conoce el tiempo que lleva recuperarse de una caída, puede eliminar por completo la parte de desvanecimiento / desaparición. Imagina a un jugador remoto muriendo en uno de los obstáculos. Su representación local todavía se está ejecutando cuando llega una notificación. Se muestra al jugador tropezando de inmediato. Les lleva tiempo levantarse y comenzar a correr nuevamente. En realidad, lleva tanto tiempo como si se vieran muriendo en el obstáculo. Por lo tanto, cuando están en funcionamiento nuevamente, se sincronizan las posiciones locales y remotas.
fuente