Conectar jugadores: cómo funciona Unity Multiplayer
19/05/2017

Conectar jugadores: cómo funciona Unity Multiplayer

Diseño y producción audiovisual

Una de las principales fuentes de quebraderos de cabeza a la hora de desarrollar un videojuego es, sin lugar a dudas, la implantación de un sistema multijugador. El nivel de detalles, la complejidad en el desarrollo e incluso en la búsqueda y solución de fallos y problemas el multijugador son algunas de las características propias de cualquier sistema que se tenga que sincronizar y comunicar con múltiples instancias de un proyecto.

Como ya hemos visto anteriormente Unity nos ofrece una variedad de servicios que pretender hacer nuestra vida, como desarrolladores, mucho más fácil. Es ahí donde encontraremos también el servicio de Unity Multiplayer, un servicio que mediante componentes y una API (interfaz de programación de aplicaciones) de bajo nivel nos permitirá crear e implementar funciones de red de forma sencilla y rápida.

Lo primero que deberemos hacer es aceptar las condiciones EULA (Licencia de usuario final) del sistema y accederemos a la configuración básica del servicio. Hay que destacar que el servicio de multiplayer de Unity no es totalmente gratuito y según la configuración del mismo y de las características que necesitemos (CCU (usuarios concurrentes), Live Server, etc) el sistema calculará de forma aproximadamente el coste mensual del servicio.

Unity Network Manager

Para empezar a usar las opciones de Multiplayer necesitaremos tener un objeto en nuestra escena que contenga el componente NetworkManager. Este componente nos permitirá configurar las características del proyecto (creación de instancias, control de escenas, control de estados, matchmaking,...). Si añadimos también el componente de NetworkManagerHUB dispondremos también de algunos controles de interfaz de usuario para poder interactuar con nuestro controlador.

Configurando el Player

El siguiente paso sería configurar el objeto correspondiente al jugador para poder enviar los datos necesarios al servidor. Para ello añadiremos el componente NetworkIdentity a nuestro objeto. Deberemos activar la opción “Local Player Authority”  para poder controlar el movimiento de nuestro objeto a través del servidor. Una vez asignado el componente podemos registrar nuestro objeto como jugador en el controlador. Para ello volveremos al objeto de NetworkManager y en las opciones de SpawnInfo asignaremos el objeto del jugador en la opción de PlayerPrefab. Como podremos ver en las opciones podemos realizar acciones de Spawing (creación de objetos en vivo) con otros tipos de objetos como puede ser el caso de enemigos.

Antes de continuar, hablemos un poco sobre cómo funciona el concepto de multijugador en los videojuegos online. Para simplificar el ejemplo consideraremos un juego en el que simplemente habrá dos jugadores online. En este caso el servidor creará las diferentes instancias de los jugadores y las ubicará en el mundo virtual, enviando sus posiciones a los dos clientes. Cuando un cliente interactúe con el proyecto sólo moverá a su jugador y enviará la información correspondiente al servidor que a su vez la comunicará al segundo cliente para que este sea capaz de representar el movimiento del primer jugador. Habiendo aclarado esto podemos entender que de los 2 jugadores debemos diferenciar cuál corresponde a nuestro jugador para que sea el que procese el Input.

Controlando al jugador

Unity nos lo pone fácil simplemente debemos añadir la referencia a la librería de networking (using UnityEngine.Networking;) y hacer que la clase del PlayerController herede de la clase NetworkBehaviour (public class PlayerController : NetworkBehaviour). Gracias a esto podremos usar simplemente isLocalPlayer para determinar si ese PlayerController corresponde a nuestro usuario o al de otro jugador. Con esto podremos mover a nuestro PlayerController en local, pero las otras instancias del juego que estén conectadas no verán ningún cambio, para eso debemos enviar los cambios de posición de nuestro PlayerController.

Además de usar isLocalPlayer en nuestro código podemos usar también una función que al crear la instancia sólo afectará al jugador local, para ellos debemos sobreescribir la función OnStartLocalPlayer dentro de nuestro PlayerController (public override void OnStartLocalPlayer() {} ) y especificar dentro de la función todo aquellas acciones a ejecutar sobre nuestro jugador local en el momento de instanciarlo.

Por último para poder sincronizar los datos de los clientes a través del servidor debemos enviar y recibir la información para ello simplemente deberemos añadir el componente NetworkTransform a nuestro objeto Player, este componente sincronizará los datos de posición y rotación entre clientes.

Estos componentes son aplicables a cualquier objeto que debamos sincronizar entre clientes como puede ser en el caso de disparos, obstáculos que sean desplazados por los usuarios, etc.

La funcionalidad de Multiplayer nos aporta muchas más variables con las que interactuar y que controlar (retardos, pérdidas de paquetes, incoherencias entre los tiempos de retardo, etc), pero a su vez nos permite grandes posibilidades y es uno de los recursos por los que optan muchos de los videojuegos que podemos encontrar actualmente. Esto es un pequeño ejemplo a modo de introducción de cómo funciona el servicio de Unity de Multiplayer, pero este servicio es muy amplio y extenso como para mostrarlo en su totalidad aquí, así que no dudes en buscar más sobre este servicio y todas sus posibilidades.

¿Te atreves a crear un proyecto multijugador usando Unity Multiplayer? Déjanos tu comentario

Curso relacionado: Curso Superior de Diseño y Desarrollo de Videojuegos

Comparte en:

Ingeniero Técnico en Telecomunicaciones. Trabaja actualmente como Lead Game Developer y Game Designer en una compañía de videojuegos.

Composiciones tridimensionales en Adobe® After Effects®
21/07/2017

Cómo hacer composiciones tridimensionales en Adobe® After Effects®

Si ya conoces lo básico de Adobe After Effects seguro que tendrás ganas de probar los efectos de cámara,te animamos a que te atrevas y des el paso para un mayor imp...

AngularJS para el desarrollo de una web
20/07/2017

¿Por qué usar AngularJS en el desarrollo de una web?

Hoy quiero hablaros de Angular, un framework JavaScript muy usado en la actualidad, tanto para respuestas web como realizar apps móviles híbridas. En concreto, me re...

6 mejores juegos 3D hechos con Unity
19/07/2017

6 mejores juegos 3D hechos con Unity

Unity es uno de los motores gráficos más populares, en este post vamos a ver algunos de los mejores títulos desarrollados recientemente usando este software para ve...

Comentarios

No hay comentarios.

Añadir nuevo comentario