Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post and the FAQ. |
En el sistema High Level API (HLAPI) de Unity, los juegos multijugador incluyen:
Un servidor: Un servidor es una instancia del juego al que todos los demás jugadores se conectan cuando quieren jugar juntos. Un servidor a menudo maneja varios aspectos del juego, como mantener la puntuación y transmitir esa información al cliente.
** Clientes: ** Los clientes son instancias del juego que generalmente se conectan desde diferentes computadoras al servidor. Los clientes pueden conectarse a través de una red local o en línea.
Un cliente es una instancia del juego que se conecta al servidor, de modo que la persona que lo juega puede jugar con otras personas que se conectan con sus propios clientes.
El servidor puede ser un “servidor dedicado” o un “servidor host”.
Servidor dedicado: Esta es una instancia del juego que solo se ejecuta para actuar como servidor.
Servidor de host: cuando no hay un servidor dedicado, uno de los clientes también cumple la función del servidor. Este cliente es el “servidor de host”. El servidor host crea una única instancia del juego (llamado el host), que actúa como servidor y cliente.
El siguiente diagrama representa a tres jugadores en un juego de varios jugadores. En este juego, un cliente también actúa como anfitrión, lo que significa que el cliente es el “cliente local”. El cliente local se conecta al servidor host y ambos se ejecutan en la misma computadora. Los otros dos jugadores son clientes remotos, es decir, están en computadoras diferentes, conectadas al servidor host.
El host es una instancia única de su juego, actuando como servidor y cliente al mismo tiempo. El host utiliza un tipo especial de cliente interno para la comunicación del cliente local, mientras que otros clientes son clientes remotos. El cliente local se comunica con el servidor a través de llamadas a funciones directas y colas de mensajes, porque está en el mismo proceso. En realidad, comparte la escena con el servidor. Los clientes remotos se comunican con el servidor a través de una conexión de red normal. Cuando usa HLAPI de Unity, todo esto se maneja automáticamente para usted.
Uno de los objetivos del sistema multijugador es que el código para clientes locales y clientes remotos sea el mismo, de modo que solo tenga que pensar en un tipo de cliente la mayor parte del tiempo cuando desarrolle su juego. En la mayoría de los casos, Unity maneja esta diferencia automáticamente, por lo que rara vez debe pensar en la diferencia entre su código que se ejecuta en un cliente local o un cliente remoto.
Cuando crea un juego de un solo jugador en Unity, usa el método GameObject.Instantiate
para crear nuevos GameObjects en tiempo de ejecución. Sin embargo, con un sistema multijugador, el servidor en sí debe “spawn” GameObjects para que estén activos dentro del juego en red. Cuando el servidor genera GameObjects, desencadena la creación de GameObjects en clientes conectados. El sistema de desove maneja el ciclo de vida del GameObject y sincroniza el estado de GameObject en función de cómo estableces el GameObject.
Para obtener más detalles sobre la creación de instancias y el spawning en red, consulte la documentación sobre Spawning GameObjects.
El sistema HLAPI multijugador de Unity maneja al jugador GameObjects de manera diferente a los GameObjects que no son jugadores. Cuando un nuevo jugador se une al juego (cuando un nuevo cliente se conecta al servidor), GameObject de ese jugador se convierte en un GameObject “jugador local” en el cliente de ese jugador, y Unity asocia la conexión del jugador con el GameObject del jugador. Unity asocia un jugador GameObject para cada persona que juega el juego, y enruta comandos de red a ese GameObject individual. Un jugador no puede invocar un comando en el GameObject de otro jugador, solo el suyo.
Para obtener más información, consulte la documentación sobre Player GameObjects.
Los servidores y los clientes pueden administrar el comportamiento de GameObject. El concepto de “autoridad” se refiere a cómo y dónde se administra un GameObject. El HLAPI de Unity se basa en “server luthority” como el estado predeterminado, donde el servidor (el host) tiene autoridad sobre todos los GameObjects que no representan jugadores. Los GameObjects del jugador son un caso especial y se los trata como si tuvieran “autoridad local”. Es posible que desee construir su juego usando un sistema de autoridad diferente: para obtener más detalles, consulte Network Authority (autoridad en red)