NetworkIdentity es un componente de Unity que está en el corazón del nuevo sistema de red. Se puede añadir a los objetos desde el elemento de menú AddComponents-> Network-> NetworkIdentity. Este componente controla la identidad de red de un objeto, y hace que el sistema de red sea consciente de ello. Esto muestra como parece el componente NetworkIdentity en un objeto:
Con el sistema de autoridad servidor del sistema de red de Unity, los objetos en red con NetworkIdentities deben estar “generadas” por el servidor utilizando el NetworkServer.Spawn(). Esto causa que ellos estén asignados al NetworkInstanceId y se creen en clientes que estén conectadas al servidor.
Los objetos en escena son tratados un poco diferente que los objetos instanciados dinámicamente. Estos objetos todos están presentes en la escena en ambos el cliente y el servidor. Sin embargo, cuando construya el juego todos los objetos en escena con network identities son desactivados. Cuando el cliente se conecte al servidor, el servidor le dice al cliente qué objetos de escena deben estar activados y cuál es su información de estado actualizada a través de mensajes de generación. esto asegura que el cliente no contendrá objetos que estén ubicados en posiciones incorrectas cuando empiecen a jugar, o incluso objetos que serán eliminados inmediatamente al conectarse ya que algún evento los quito antes de que el cliente se conectará. La casilla de verificación Server Only asegurará que este objeto en particular no será generado o habilitado en los clientes.
La configuración local player authority le permite a este objeto ser controlado por el cliente que lo posee - el objeto jugador local en ese cliente tiene autoridad sobre este. Esto es utilizado por otros componentes como el NetworkTransform.
Este componente contiene información de seguimiento como cuál ID de escena, ID de network (red) y ID de asset el objeto ha sido asignado. El ID de escena es válido en todos los objetos de escena con un componente NetworkIdentity. El Network ID es el ID de esta instancia en particular del objeto, puede haber varios objetos instanciados de un tipo de objeto en particular y el network ID es utilizado para identificar a qué objeto, por ejemplo, se debe aplicar una actualización de network (red). El asset ID (ID de asset) se refiere a con qué asset fuente el objeto fue instanciado. Esto se utiliza internamente cuando un objeto prefab en particula es generado sobre la red. Esta información está expuesta en el panel de pre-visualización al final del inspector:
En tiempo de ejecución hay más información que mostrar aquí (un NetworkBehaviour desactivado se muestra sin negrilla):
Propiedad: | Función: |
---|---|
assetId | Esto identifica el prefab asociado a este objeto (para la aparición). |
clientAuthorityOwner | El cliente tiene autoridad para este objeto. Este será null si ningún cliente tiene autoridad. |
connectionToClient | La conexión asociada con este NetworkIdentity. Esto es solo válido para objetos jugador en el servidor. |
connectionToServer | La UConnection asociada con esta instancia de NetworkIdentity. Solo es válida para objetos de jugador en un cliente local. |
hasAuthority | Trie, si este objeto es la versión autoritaria del objeto. Por lo que puede estar en el servidor, o en el cliente con localPlayerAuthority. |
isClient | True, si el objeto está corriendo en un cliente. |
isLocalPlayer | Devuelve true si este objeto es el que representa al jugador en la máquina local. |
isServer | True, si este objeto está corriendo en el servidor, y ha sido generado. |
localPlayerAuthority | True si este objeto es controlado por el Cliente el cual es dueño - el objeto jugador local en ese cliente tiene autoridad sobre este. Este es utilizado por otros componentes tal como NetworkTransform. |
netId | Un identificador único para esta sesión de red, asignado cuando aparezca el objeto. |
observers | La lista de NetworkConnections que son capaces de ver este objeto. Esto es solo de lectura. |
playerControllerId | El identificador del controller (controlador) asociado con este objeto. Solamente válido para objetos jugador. |
sceneId | Un identificador único para objetos en red en una escena. Esto solamente se puebla en modo-de-reproducción. |
serverOnly | Una bandera (flag) para hacer que este objeto no aparezca en los clientes. |