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. |
Esta página contiene una descripción general de las cosas más básicas y comunes que necesita al configurar un proyecto de varios jugadores. En términos de lo que necesita en su proyecto, estos son:
Un Network Manager
Una interfaz de usuario (para que los jugadores encuentren y se unan a los juegos)
Jugadores Prefabs en red (para que los jugadores controlen)
Scripts y GameObjects que son multijugador
Hay variaciones en esta lista; por ejemplo, en un juego de ajedrez multijugador o en un juego de estrategia en tiempo real (RTS), no necesita un GameObject visible para representar al jugador. Sin embargo, es posible que aún desee un GameObject vacío para representar al jugador y adjunte scripts que se relacionen con lo que el jugador puede hacer.
Esta página introductoria contiene una breve descripción de cada uno de los elementos enumerados anteriormente. Sin embargo, cada sección se vincula a documentación más detallada, que debe seguir leyendo para comprenderla por completo.
También hay algunos conceptos importantes que debe comprender y tomar decisiones sobre cuándo construir tu juego. Estos conceptos se pueden resumir en términos generales como:
La relación entre un cliente, un servidor y un host (anfitrión)
La idea de autoridad sobre los GameObjects y sus acciones.
Para obtener más información sobre estos conceptos, consulte la documentación sobre Conceptos del sistema de red.
El administrador de red es responsable de gestionar los aspectos de red de su juego multijugador. Debería tener uno (y solo un) Network Manager activo en su escena a la vez.
El componente integrado del Network Manager de Unity completa todas las características para administrar su juego multijugador en un solo componente. Si tiene requisitos personalizados que no están cubiertos por este componente, puede escribir su propio administrador de red en scripting en lugar de usar este componente. Si recién está comenzando con juegos de varios jugadores, debe usar este componente.
Para obtener más información, consulte la documentación en el Network Manager.
Casi todos los juegos multijugador brindan a los jugadores una forma de descubrir, crear y unirse a “instancias” individuales de juegos (también conocidas como “matches”). Esta parte del juego se conoce comúnmente como “lobby” y algunas veces tiene características adicionales como chat.
Unity tiene una versión incorporada extremadamente básica de dicha interfaz, llamada NetworkManagerHUD. Puede ser extremadamente útil en las primeras etapas de creación de su juego, ya que le permite crear fácilmente partidos y probar su juego sin la necesidad de implementar su propia IU. Sin embargo, es muy básico en funcionalidad y diseño visual, por lo que debe reemplazarlo con su propia IU antes de finalizar su proyecto.
Para obtener más información, consulte la documentación sobre el Network Manager HUD.
La mayoría de los juegos multijugador tienen algún tipo de objeto que un jugador puede controlar, como un personaje, un automóvil u otra cosa. Algunos juegos multijugador no cuentan con un único “objeto jugador” visible, sino que permiten a un jugador controlar muchas unidades o elementos, como en el ajedrez o juegos de estrategia en tiempo real. Otros ni siquiera presentan objetos específicos, como un juego de pintura de lienzo compartido. Sin embargo, en todas estas situaciones, generalmente necesitas crear un GameObject que * conceptualmente * represente al jugador en tu juego. Convierte este GameObject en Prefab, y adjunta todos los scripts que controlan lo que el jugador puede hacer en tu juego.
Si está usando el componente Network Manager de Unity (consulte el * Network Manager*, arriba), asigne el campo Prefab al Player Prefab.
Cuando el juego se está ejecutando, el administrador de red crea una copia (una “instancia”) de su jugador Prefab para cada jugador que se conecte a la partida.
Sin embargo, y es posible que esto resulte confuso para las personas nuevas en la programación multijugador, debes asegurarte de que los scripts de tu jugado Prefab estén “al tanto” de si el jugador que controla la instancia está usando la computadora host ( la computadora que está administrando el juego) o una computadora cliente (una computadora diferente a la que está administrando el juego).
Esto se debe a que ambas situaciones ocurrirán al mismo tiempo
Escribir scripts para un juego multijugador es diferente de escribir scripts para un juego de un solo jugador. Esto se debe a que cuando escribe un script para un juego de varios jugadores, debe pensar en los diferentes contextos en los que se ejecutan los scripts. Para obtener más información sobre los conceptos de red que se tratan aquí, consulte la documentación de Conceptos del sistema de red.
Por ejemplo, los scripts que coloque en su jugador Prefab deben permitir que el “propietario” de esa instancia de jugador lo controle, pero no debe permitir que otras personas lo controlen.
Debe pensar si el servidor o el cliente tienen autoridad sobre lo que hace el script. A veces, desea que el script se ejecute tanto en el servidor como en los clientes. Otras veces, solo quiere que el script se ejecute en el servidor, y solo quiere que los clientes repliquen cómo se mueven los GameObjects (por ejemplo, en un juego en el que los jugadores recogen GameObjects coleccionables, el script solo debe ejecutarse en el servidor para que el servidor pueda ser la autoridad sobre el número de GameObjects recopilados).
Dependiendo de lo que haga su script, debe decidir qué partes de su script deben estar activas en qué situaciones.
Para el jugador GameObjects, cada persona generalmente tiene control activo sobre su propia instancia de jugador. Esto significa que cada cliente tiene autoridad local sobre su propio jugador, y el servidor acepta lo que el cliente le dice sobre lo que está haciendo el jugador.
Para los GameObjects que no son jugadores, el servidor generalmente tiene autoridad sobre lo que sucede (como si un elemento ha sido recolectado) y todos los clientes aceptan lo que el servidor les dice sobre lo que le sucedió a GameObject.