Version: 2021.1
NetworkClient
NetworkServer

NetworkConnection

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.

NetworkConnection is a high-level API class that encapsulates a network connection. (NetworkClient)[class-NetworkClient] objects have a NetworkConnection, and NetworkServers have multiple connections - one from each client. NetworkConnections have the ability to send byte arrays, or serialized objects as network messages.

Propiedades

Propiedad: Función:
hostId The NetworkTransport hostId for this connection.
connectionId The NetworkTransport connectionId for this connection.
isReady Flag to control whether state updates are sent to this connection
lastMessageTime La última vez que un mensaje fue recibido en esta conexión.
address La dirección IP del punto final a la conexión que esta está conectada.
playerControllers El conjunto de jugadores que han sido agregados con AddPlayer().
clientOwnedObjects El conjunto de objetos sobre los que esta conexión tiene autoridad.

La clase NetworkConnection tiene funciones virtuales que son llamadas cuando los datos son enviados a la transport layer o recibidos de la transport layer. Estas funciones permiten versiones especializadas del NetworkConnection para inspeccionar o modificar estos datos, o incluso en-rutarlo a diferentes fuentes. Estas funciones se muestran abajo, incluyendo el comportamiento predeterminado:

public virtual void TransportRecieve(byte[] bytes, int numBytes, int channelId)
{
    HandleBytes(bytes, numBytes, channelId);
}

public virtual bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
{
    return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
}

Un ejemplo de uso de estas funciones es registrar el contenido de paquetes entrando y saliendo. Abajo hay un ejemplo de una clase DebugConnection que es recibida del NetworkConnection que registrar los primeros 50 bytes de paquetes a la consola. Para utilizar una clase como esta llame la función SetNetworkConnectionClass() en un NetworkClient o NetworkServer.

class DebugConnection : NetworkConnection
{
    public override void TransportRecieve(byte[] bytes, int numBytes, int channelId)
    {
        StringBuilder msg = new StringBuilder();
        for (int i = 0; i < numBytes; i++)
        {
            var s = String.Format("{0:X2}", bytes[i]);
            msg.Append(s);
            if (i > 50) break;
        }
        UnityEngine.Debug.Log("TransportRecieve h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);

        HandleBytes(bytes, numBytes, channelId);
    }

    public override bool TransportSend(byte[] bytes, int numBytes, int channelId, out byte error)
    {
        StringBuilder msg = new StringBuilder();
        for (int i = 0; i < numBytes; i++)
        {
            var s = String.Format("{0:X2}", bytes[i]);
            msg.Append(s);
            if (i > 50) break;
        }
        UnityEngine.Debug.Log("TransportSend    h:" + hostId + " con:" + connectionId + " bytes:" + numBytes + " " + msg);

        return NetworkTransport.Send(hostId, connectionId, channelId, bytes, numBytes, out error);
    }
}
NetworkClient
NetworkServer