Version: 2020.2
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
Copyright © 2023 Unity Technologies
优美缔软件(上海)有限公司 版权所有
"Unity"、Unity 徽标及其他 Unity 商标是 Unity Technologies 或其附属机构在美国及其他地区的商标或注册商标。其他名称或品牌是其各自所有者的商标。
公安部备案号:
31010902002961