This document is about: FUSION 2
SWITCH TO

データストリーミング

時には、ネットワークを介して大量のデータを送信したい場合(プレイヤーによって構築されたマップを同期する時など)があるでしょう。しかし、ネットワークプロパティもリモートプロシージャコール(RPC)も、このタスクには向いておらず、通常は大きなペイロードを送信するために使用すべきではありません。ここで、FusionのデータストリーミングAPIの出番となります。

NetworkRunnerSendReliableDataToPlayer/SendReliableDataToServerメソッドは、大きなバイト列を送信するために使用できます。

C#

// Large data that needs to be sent
byte[] largeData = new byte [10000];

// Provide 4 numbers as a unique key for the data
var key = ReliableKey.FromInts(42, 0, 0, 0);

// Use in shared mode or as the server/host to send data to players
runner.SendReliableDataToPlayer(playerRef, key, largeData);

// Use as a client to send data to the server/host
runner.SendReliableDataToServer(key, largeData);

内部的には、データは複数のフラグメントに分割された後、サーバー/対象クライアントに送られ、再構築されます。

データの受信が完了すると、INetworkRunnerCallbacks.OnReliableDataReceivedコールバックが呼び出されます。データ転送ステータスを追跡するためのコールバックも提供されています。

C#

public void OnReliableDataReceived(NetworkRunner runner, PlayerRef player, ReliableKey key, ArraySegment<byte> data) { }

public void OnReliableDataProgress(NetworkRunner runner, PlayerRef player, ReliableKey key, float progress) { }    

複数のデータセットを並列にストリーミングすることも可能で、各データは16バイトの(4つのintまたは2つのulongから作られる)keyで識別されます。

keyは、メタデータ(受信完了後のデータをどのオブジェクトが処理するかなど)を送信するために使用することもできます。これは、複数のクラスがOnReliableDataReceivedコールバックを実装していて、それぞれが特定の受信データのみに関心があるような場合に必要になることがあります。

Back to top