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 はネットワーク接続をカプセル化する 高レベル API クラスです。NetworkClient オブジェクトは NetworkConnection
を持ち、NetworkServers は各クライアントから 1 つずつ複数の接続を持ちます。NetworkConnection はバイト配列やシリアライズされたオブジェクトをネットワークメッセージとして送信することができます。
プロパティ | 機能 | |
---|---|---|
hostId | この接続の NetworkTransport hostId | |
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);
}
}