Multijugador Tutorial 1: conceptos

4

Index

Tagged

Stats

29,393 visits, 45,174 views

Tools

License

This tutorial is licensed under CC BY 4.0. Please refer to the license text if you wish to reuse, share or remix the content contained within this tutorial.

Published on 10 Sep, 2014. Last updated 25 Feb, 2019

Compensando por condiciones de red

Para minimizar el ancho de banda y la pérdida de paquetes, por defecto el motor multijugador transmite datos hasta 30 veces por segundo. Los juegos típicamente renderizan a 60 frames por segundo, así que esto significa que la información sólo se envía aproximadamente cada otro frame.

Compensando por Clientes

Los clientes estarán recibiendo datos del host indicando la información de los objetos, tal como sus posiciones. Si ellos directamente solo mostraran lo que se recibe, los movimientos de los objetos aparecerían entrecortados ya que sólo se actualizarían cada otro frame. Ellos incluso se moverían irregularmente, con las actualizaciones sujetas al PDV y la pérdida de paquetes.

Para mejorar la experiencia de juego, el motor multijugador interpola entre las actualizaciones para un valor como las coordenadas X y Y. En el caso de posiciones, interpolará linealmente entre actualizaciones. Por ejemplo si los datos están llegando cada siguiente frame, entonces el frame que no recibe actualización usará un valor intermedio a las dos actualizaciones para cada lado. Esto hace el movimiento más suave de nuevo sin requerir más datos.

Sin embargo, cuando se está renderizando un frame interpolado, él no sabe cuál es el siguiente valor aún, ¡debido a que llegará en el futuro! en vez de eso usa un tiempo de máquina, el motor multijugador resuelve esto añadiendo un retraso artificial extra de 80ms para los clientes. Esto significa que el motor puede saber acerca de las próximas actualizaciones que vienen a lo que actualmente se está renderizando. Incluso si la próxima actualización está desaparecida debido a una pérdida de paquetes, puede ser posible usar la siguiente actualización para interpolar. Incluso si las condiciones de red son pobres y significa que no hay actualizaciones por 80ms, el motor puede seguir extrapolando desde la dirección de las dos actualizaciones anteriores. Esto sin embargo, es solo adivinación, y el objeto podría saltar si la próxima actualización muestra que el objeto de hecho se ha ido a otro lugar.

El motor multijugador te permite usar tres posibles modos de interpolación para valores: lineal (Para posiciones de objetos), angular (para ángulos de objetos), y ninguno (para datos que no deben ser interpolados, como un booleano indicando si un láser está activado o no).

Variaciones de latencia

Debe notarse que la latencia puede cambiar. Por ejemplo un dispositivo de enrutamiento en algún lugar puede sobrecargarse, y los datos entre ambos jugadores de repente se re-enrutan por un camino diferente que es más lento; o quizás un camino más rápido se vuelve disponible. La latencia algunas veces va mejorando gradualmente en el primer minuto o después de la conexión, mientras los dispositivos a través de la ruta de conexión gradualmente optimizan la conexión y encuentran el camino más rápido posible. La latencia es medida constantemente para detectar éstas variaciones.

Si la latencia se reduce, el motor multijugador temporalmente corre el juego en un muy leve avance rápido así que reduce que tan lejos detrás de ti estás viendo el juego. Del otro lado, si la latencia se incrementa, muy levemente corre el juego en cámara lenta e incrementa que tan lejos detrás de ti estás viendo en el juego. esto es necesario para evitar los entrecortes y movimientos irregulares que ocurren cuando los 80ms de retraso ya no cubren ninguna actualización. Estas adaptaciones deben ocurrir lo suficientemente lento para ser imperceptibles, pero ayuda a asegurar la mejor experiencia posible si la calidad de la conexión varía durante el juego.

Compensando para el host

Los host tienen la versión autoritaria del juego. Tienen cero latencia, ya que no necesitan transmitir datos a sí mismos. En otras palabras, el host está participando del juego "real", y los clientes están haciendo lo mejor para renderizar el mismo juego con retrasos y posiblemente actualizaciones irregulares del host. El host tiene una ligera ventaja de juego como resultado.

Pensarás que el host necesitará interpolar entre actualizaciones recibidas de los clientes de las posiciones de los objetos. Esto actualmente no ocurre, debido a que los clientes no deben decirle al host dónde se encuentran. De hecho, el host debe decirles a los clientes en dónde están. La razón se explica en la siguiente sección.

  • 0 Comments

Want to leave a comment? Login or Register an account!