Network en unity 3d

download Network en unity 3d

of 8

Transcript of Network en unity 3d

  • 7/30/2019 Network en unity 3d

    1/8

    Tema 1Network Tutorial

    Las funcionalidades de red son un concepto extenso y lleno de detalles. En Unity, es muy simplecrear funcionalidades de red. Sin embargo, es prioritario entender la amplitud y la profundidad que involucracrear cualquier tipo de videojuego en red. El siguiente tutorial explicar los conceptos fundamentales deredes, y las ejecuciones especficas de Unity que puedes usar. Si nunca has creado antes un videojuego enred, es altamente recomendado que leas la siguiente gua en detalle antes de comenzar.

    En esta seccin abordaremos todos los conceptos involucrados en las funcionalidades de red. Dichosconceptos deben ser entendidos antes de comenzar a desarrollar con la arquitectura de redes de Unity.Adems, servirn como introduccin a otros conceptos ms complejos.

    1.1 Qu son las funcionalidades de red?

    Una funcionalidad de red es una comunicacin entre dos o ms dispositivos (PC, mviles, consolas...).La idea fundamental es la relacin entre un cliente (El dispositivo que pide informacin) y un servidor (Eldispositivo que responde a las peticiones). El servidor puede ser o bien un host dedicado que utilizan todoslos clientes, o simplemente el dispositivo de uno de los jugadores que ejecutan el juego. En ese caso setratara tambin de un cliente, pero actuando a la vez como servidor para otros jugadores.

    Una vez que un servidor comienza a funcionar y un cliente se conecta, los dos dispositivos intercambian

    datos tal y como lo requiera el sistema de juego.

    Crear un videojuego con funcionalidades de red requiere mucha atencin a algunos detalles especficos.Incluso aunque las acciones a travs de la red son fciles de disear y crear en Unity, el funcionamiento enred resulta complejo. Una importante decisin de diseo en Unity es hacer las funciones de red tan robustasy flexibles como sea posible. Eso significa que t, como creador del videojuego, eres responsable deaspectos que pueden ser manejados con un sistema automtico, pero menos robusto, en otras plataformas.de desarrollo.

    Tutorial de Unity 3D Tema 1

  • 7/30/2019 Network en unity 3d

    2/8

    Tema 1Network Tutorial

    Las decisiones que tomes durante la implementacin tendrn un efecto potencialmente significativo en eldiseo final de tu videojuego, as que es mejor tomarlas lo ms tempranamente posible en el proceso dedesarrollo. Entender los conceptos de las funcionalidades de red te ayudar a planificar tu diseo y evitarproblemas de implementacin.

    1.2 Enfocando las funcionalidades de red

    Hay dos enfoques distintos para estructurar un videojuego en red. Tenemos el yel . Ambos enfoques subyacen en un servidor conectando clientes y pasandoinformacin entre ellos. Ambos ofrecen tambin privacidad para el usuario final puesto que los clientesnunca llegan a conectar directamente el uno con el otro ni revelar su IP a los dems.

    1.2.1 El servidor autoritario

    El enfoque de servidor autoritario requiere que el servidor realice toda la simulacin del mundo, laaplicacin de las reglas de juego y el procesamiento de la entrada de datos de los clientes. Cada cliente

    enva su entrada (En forma de pulsacin de teclas o peticin de acciones) al servidor y continuamente recibedesde el servidor el estado actual del juego.

    El cliente nunca realiza ningn cambio en el estado de juego por s mismo. En lugar de ello le comunica alservidor lo que quiere hacer, y el servidor procesa la peticin y responde al cliente con el resultado.

    Principalmente existe una capa de separacin entre lo que el jugador quiere hacer y lo que realmentesucede. Esto permite al servidor escuchar cada peticin de los clientes antes de decidir cmo actualizar elestado de juego.

    Una ventaja de este tipo de enfoque es que hace que el cliente lo tenga mucho ms difcil para hacertrampas. Por ejemplo, los clientes no tienen posibilidad de comunicar al servidor (Y por tanto al resto declientes) que un enemigo ha sido eliminado, ya que la decisin no recae en ellos. Ellos slo pueden comunicaral servidor que un arma ha sido disparada desde un lugar, y el servidor es quien determina si se haproducido o no un impacto.

    Otro ejemplo de servidor autoritario sera un videojuego multijugador basado en fsicas. Si cada cliente tienepermiso para procesar sus propias simulaciones fsicas, se produciran pequeas variaciones entre clientes

    que llevaran a gradualmente a perder la sincronizacin entre ellos. En cambio, si la simulacin fsica se

    Tutorial de Unity 3D Tema 1

  • 7/30/2019 Network en unity 3d

    3/8

    Tema 1Network Tutorial

    realiza de forma centralizada en el servidor, entonces la situacin final actualizada puede ser enviada devuelta a los clientes, garantizando que sta sea consistente.

    Con los detalles que hemos dado puede parecerte un sistema ideal para gestionar las funcionalidades dered, pero existe una desventaja potencial importante. La principal contra es el tiempo que tardan losmensajes en viajar a travs de la red. Si el jugador pulsa una tecla para moverse y tarda una dcima desegundo en llegar la respuesta del servidor, entonces el retraso se har perceptible por parte del jugador.Una solucin a ello es utilizar la denominada (Prediccin de lado del cliente). La basede esta tcnica es permitir que el cliente sea capaz de actualizar su versin local del estado de juego, perosiendo capaz de recibir correcciones por parte del servidor autoritario cuando sea necesario. Generalmentesto debera ser utilizado slo para acciones de juego sencillas y cambios poco significativos en el estado de

    juego. Por ejemplo, no sera deseable indicar a un jugador que un enemigo ha muerto de cara al servidor ytener que cambiar despus esa decisin.

    La programacin de la prediccin por parte del cliente es un proceso complejo. No ser cubierta en estetutorial pero hay libros y recursos en internet que te ayudarn si deseas investigar ms all.

    Un servidor autoritario sufre una carga de procesamiento mayor que un servidor no autoritario. Si no serequiere acceder al servidor para manejar todos los cambios en el estado de juego, es posible distribuirgran parte de la carga de ejecucin entre los clientes.

    1.2.2 El servidor no autoritario

    El servidor no autoritario no controla el resultado de cada entrada de datos (Teclado, ratn,acelermetro...) que se produce por parte del usuario. Los propios clientes procesan la entrada del usuario

    y la lgica de juego localmente, y entonces envan el resultado de las acciones al servidor. El servidorsincroniza todas las acciones con el estado del mundo. Es ms fcil de implementar desde el punto de vistadel diseo, ya que el servidor simplemente intercambia mensajes entre los clientes y no realizaprocesamiento adicional ms all del realizado por los clientes.

    No hay necesidad de mtodos de prediccin de ningn tipo, ya que los clientes manejan todas las fsicas yeventos por s mismos y retransmiten lo que sucede al servidor. Los clientes son propietarios de sus objetosy son los nicos agentes con permisos para enviar modificaciones locales de los mismos a travs de la red.

    Tutorial de Unity 3D Tema 1

  • 7/30/2019 Network en unity 3d

    4/8

    Tema 1Network Tutorial

    1.3 Mtodos de comunicacin de funcionalidades de red

    Ahora que ya hemos tratado las arquitecturas bsicas para videojuegos en red, vamos a explorar abajo nivel cmo clientes y servidores se comunican entre s.

    Hay dos modos fundamentales: (RPCs llamadas a procedimientos remotos) y(Sincronizacin de estado). Es habitual combinar ambos mtodos en diferentes aspectos de

    un determinado videojuego.

    1.3.1 Remote Procedure Calls (RPCs llamadas a procedimientos remotos)

    Las RPCs se utilizan para invocar funciones en otros dispositivos dentro de la red, o tambin dentrodel canal dentro de un cliente y servidor que se ejecutan en el mismo dispositivo. Los clientes pueden envarRPCs al servidor, y el servidor puede envar RPCs a uno o ms clientes. Lo habitual es que sean usadas paraacciones que NO suceden de manera frecuente. Por ejemplo, si un cliente activa un interruptor para abriruna puerta, puede enviarse una RPC al servidor indicando que la puerta ha sido abierta. El servidor puede

    enviar otra RPC a todos los clientes, invocando sus funciones locales para abrir la misma puerta.Generalmente se utilizan para ejecutar eventos individuales.

    1.3.2 State Synchronization (Sincronizacin de estado)

    Se utiliza para compartir datos que cambian continuamente. El mejor ejemplo sera la posicin deljugador en un videojuego de accin. El jugador est siempre movindose, corriendo, saltando... El resto dejugadores en la red, incluso los que no visualizan localmente a ese jugador, necesitan conocer dnde seencuentra y qu est haciendo. Retransmitiendo constantemente la posicin de ese jugador, el videojuego

    puede representarla de forma precisa al resto de jugadores en red.

    Este tipo de datos se envan frecuentemente y de manera regular a travs de la red. Dado que sondependientes del tiempo, y que requieren ancho de banda para viajar a travs de la red de una mquina aotra, es importante reducir en la medida de lo posible los datos que son enviados. En pocas palabras, lasincronizacin de estado por su naturaleza requiere mucho ancho de banda, as que uno de tus principalesobjetivos debera ser usar el mnimo posible.

    Tutorial de Unity 3D Tema 1

  • 7/30/2019 Network en unity 3d

    5/8

    Tema 1Network Tutorial

    1.4 Conectando clientes y servidores

    Puede ser un proceso complicado. Las mquinas pueden tener una direccin IP privada o pblica conun firewall local o externo que bloquee el acceso. Las funcionalidades de red de Unity tienen como objetivocontrolar todas las situaciones posibles, pero no existe una solucin universal.

    Las direcciones privadas son direcciones IP no accesibles directamente desde internet (Tambin sedenominan Network Address Translation o NAT, direcciones situadas detrs del sistema utilizado paraimplementarlas). Si lo explicamos de una forma sencilla, las direcciones privadas trabajan un un router localque termina traduciendo esa direccin en una direccin pblica. Haciendo sto, varios dispositivos con unaIP privada pueden usar una nica IP pblica para comunicarse a travs de internet. Esto nos resulta buenocuando alguien a travs de internet quiere iniciar contacto con una IP privada. La comunicacin deberealizarse a travs de la IP pblica del router, que debe pasar el mensaje a la direccin privada. Una tcnicadenominada intromisin NAT utiliza un servidor compartido comnmente conocido como facilitador paragestionar la comunicacin de forma que la IP privada pueda ser accedida a travs de la IP pblica. Todo stofunciona teniendo la IP privada contactando en primer lugar con el facilitador, que abre un agujero a

    travs del router. As el facilitador puede ver la IP pblica y el puerto que la IP privada est utilizando.Utilizando esta informacin, cualquier dispositivo de internet puede conectar con la IP privada que de otraforma resultara inalcanzable. Ntese en este punto que que la intromisin NAT es mucho ms complicadaque todo sto en la prctica.

    file:///C:/Program%20Files

    %20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference

    %20Guide.html

    file:///C:/Program%20Files

    %20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-

    HighLevelOverview.html

    file:///C:/Program%20Files

    %20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/class-NetworkView.html

    Tutorial de Unity 3D Tema 1

    http://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference%20Guide.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference%20Guide.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference%20Guide.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-HighLevelOverview.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-HighLevelOverview.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-HighLevelOverview.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/class-NetworkView.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/class-NetworkView.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/class-NetworkView.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-HighLevelOverview.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-HighLevelOverview.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/net-HighLevelOverview.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/class-NetworkView.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/class-NetworkView.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference%20Guide.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference%20Guide.htmlhttp://c/Program%20Files%20(x86)/Unity/Editor/Data/Documentation/Documentation/Components/Network%20Reference%20Guide.html
  • 7/30/2019 Network en unity 3d

    6/8

    Tema 1Network Tutorial

    The facilitator can now see the public IP address and port which the private address is using. Using thisinformation, any machine on the internet can now connect directly with the otherwise unreachable privateaddress. (Note that the details of NAT punchthrough are somewhat more complicated than this in practice.)

    Public addresses are more straightforward. Here, the main issue is that connectivity can be blocked by aninternal or external firewall (an internal firewall is one that runs locally on the computer it is protecting). Foran internal firewall, the user can be asked to remove restrictions from a particular port so as to make thegame server accessible. An external firewall, by contrast, is not under the control of the users. Unity can

    attempt to use NAT punchthrough to get access through an external firewall but this technique is notguaranteed to succeed. Our testing suggests that it generally works in practice but there doesn't appear tobe any formal research that confirms this finding.

    The connectivity issues just mentioned affect servers and clients differently. Client requests involve onlyoutgoing network traffic which is relatively straightforward. If the client has a public address then thisalmost always works since outgoing traffic is typically only blocked on corporate networks that imposesevere access restrictions. If the client has a private address it can connect to all servers except serverswith private addresses which cannot do NAT punchthrough (more will be said about this later). The server

    end is more complicated because the server needs to be able to accept incoming connections from unknownsources. With a public address, the server needs to have the game port open to the internet (ie, not blockedby a firewall). or else it cannot accept any connections from clients and is thus unusable. If the server has aprivate address it must be able to do NAT punchthrough to allow connections and clients must also permitNAT punchthrough in order to connect to it.

    Unity provides tools to test all these different connectivity situations. When it is established that aconnection can be made, there are two methods by which it can happen: direct connections (where a clientneeds to know the DNS name or IP address of the server) and connections via the Master Server. The Master

    Server allows servers to advertise their presence to clients which need not know anything about particulargame servers beforehand.

    When working with State Synchronization across multiple clients, you don't necessarily need to synchronizeevery single detail in order to make objects appear synchronized. For example, when synchronizing acharacter avatar you only need to send its position and rotation between clients. Even though the characteritself is much more complex and might contain a deep hierarchy, data about the entire hierarchydoes not need to be shared.

    Tutorial de Unity 3D Tema 1

  • 7/30/2019 Network en unity 3d

    7/8

    Tema 1Network Tutorial

    A lot of data in your game is effectively static, and clients need neither transfer it initially nor synchronize it.Using infrequent or one-time RPC calls should be sufficient to make a lot of your functionality work. Takeadvantage of the data you know will exist in every installation of your game and keep the client working byitself as much as possible. For example, you know that assets like textures and meshes exist on allinstallations and they usually don't change, so they will never have to be synchronized. This is a simpleexample but it should get you thinking about what data is absolutely critical to share from one client toanother. This is the only data that you should ever share.

    It can be difficult to work out exactly what needs to be shared and what doesn't, especially if you have nevermade a network game before. Bear in mind that you can use a single RPC call with a level name to make allclients load the entire specified level and add their own networked elements automatically. Structuring yourgame to make each client as self-sufficient as possible will result in reduced bandwidth.

    The physical location and performance of the server itself can greatly affect the playability of a gamerunning on it. Clients which are located a continent away from the server may experience a great deal of lag.This is a physical limitation of the internet and the only real solution is to arrange for the server to be as

    close as possible to the clients who will use it, or at least on the same continent.

    We've collected the following links to additional resources about networking:-

    http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networkinghttp://developer.valvesoftware.com/wiki/Lag_Compensationhttp://developer.valvesoftware.com/wiki/Working_With_Predictionhttp://www.gamasutra.com/resource_guide/20020916/lambright_01.htm

    This section will outline all the concepts involved in networking. It will serve as an introduction to deepertopics.

    This section of the guide will cover Unity's execution of the ideas discussed above.

    Network Views are Components you use to share data across the network. They are extremely important to

    understand. This page will explain them in detail.

    Tutorial de Unity 3D Tema 1

    http://developer.valvesoftware.com/wiki/Source_Multiplayer_Networkinghttp://developer.valvesoftware.com/wiki/Lag_Compensationhttp://developer.valvesoftware.com/wiki/Working_With_Predictionhttp://www.gamasutra.com/resource_guide/20020916/lambright_01.htmhttp://developer.valvesoftware.com/wiki/Source_Multiplayer_Networkinghttp://developer.valvesoftware.com/wiki/Lag_Compensationhttp://developer.valvesoftware.com/wiki/Working_With_Predictionhttp://www.gamasutra.com/resource_guide/20020916/lambright_01.htm
  • 7/30/2019 Network en unity 3d

    8/8

    Tema 1Network Tutorial

    RPC stands for Remote Procedure Call. It is a way of calling a function on a remote machine. This may be aclient calling a function on the server, or the server calling a function on all or specific clients, etc. This pageexplains RPC concepts in detail.

    State Synchronization is a method of regularly updating a specific set of data across two or more gameinstances running on the network.

    One difficult subject in networking is ownership of an object. Who controls what? Network Instantiation willdetermine this logic for you. This page will explain how to do this. It will also explain the complex alternatives,for situations when you just need more control.

    The Master Server is like a game lobby where servers can advertise their presence to clients. It is also asolution to enabling communication from behind a firewall or home network. When needed it makes itpossible to use a technique called NAT punchthrough (with help from a facilitator) to make sure your players

    can always connect with each other. This page will explain how to use the Master Server.

    Every choice you make about where and how to share data will affect the bandwidth your game uses. Thispage will share some details about bandwidth usage and how to keep it to a minimum.

    Tutorial de Unity 3D Tema 1