Version: 2022.1
言語: 日本語
NetworkClient
NetworkServer

NetworkConnection

重要: UNet は非推奨のソリューションになり、現在、新しい Multiplayer とネットワーキングソリューション (Netcode for GameObjects) が開発中です。詳細は、GameObjects Web サイトの Unity Netcode を参照してください。

NetworkConnection is a high-level API class that encapsulates a network connection. 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.

プロパティ

プロパティ 機能
hostId 接続のための ネットワークトランスポートホストID
connectionId この接続のNetworkTransport connectionId
isReady この接続に状態の更新を送信するかどうかを制御するフラグ
lastMessageTime この接続で最後にメッセージを受信した時刻
address 接続先のエンドポイントの IP アドレス
playerControllers AddPlayer() によって加えられた一連のプレイヤー
clientOwnedObjects この接続が権限を持つ一連のオブジェクト

NetworkConnection クラスには、トランスポート層にデータの送受信を行うときに呼び出される仮想関数があります。これらの関数は、特殊なバージョンの NetworkConnection を使って、データを調べたり変更したり、また、さまざまなソースにデータを送信することさえできます。これらの関数は、以下のとおりです。

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);
}

例として、送受信のパケットのコンテンツを記録してみましょう。以下は、NetworkConnection から派生した DebugConnection クラスの例で、パケットの最初の 50 バイトをコンソールに出力します。このようなクラスを使用するには、NetworkClient や NetworkServer 上で SetNetworkConnectionClass() 関数を呼び出します。

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