QoS (Quality of Service)

ノート: 現時点では、Relay と WebSockets/WebGL と併用している場合、QoS は機能しません。

Relay の QoS (Quality of Service) 機能では、ターゲット地域を選択せずに NetworkDriver をホストプレイヤーとして起動する ことで、QoS データに基づいて自動的に地域を選択できます。

ノート: QoS に対応していない Unity エディターのバージョンも存在します。QoS SDK を使用する場合は、以下のバージョンを使用してください。

  • 2022.2.0a10+
  • 2022.1.0f1+
  • 2021.3.2f1+
  • 2020.3.34f1+

地域を指定せずに割り当てリクエストを作成すると、割り当てサービスは QoS データを使用して、各地域とホスト間の接続品質に基づいた最適な利用可能地域を選択します。Relay は待ち時間とパケットロスの両方を考慮します。以下のサンプルコードを参照してください。

// Launch this method as a coroutine
private IEnumerator StartRelayServer()
{

  // Request an allocation to the Relay service without a target region
  var relayMaxPlayers = 5;
  var allocationTask = RelayService.Instance.CreateAllocationAsync(relayMaxPlayers);

  while(!allocationTask.IsCompleted)
  {
      yield return null;
  }

  if (allocationTask.IsFaulted)
  {
      Debug.LogError("Create allocation request failed");
      yield break;
  }

  var allocation = allocationTask.Result;

  // Request the join code to the Relay service
  var joinCodeTask = RelayService.Instance.GetJoinCodeAsync(allocation.AllocationId);

  while(!joinCodeTask.IsCompleted)
  {
      yield return null;
  }

  if (joinCodeTask.IsFaulted)
  {
      Debug.LogError("Create join code request failed");
      yield break;
  }

  // Get the Join Code, you can then share it with the clients so they can join
  JoinCode = joinCodeTask.Result;

  // Format the server data, based on desired connectionType
  var relayServerData = HostRelayData(allocation, "dtls");

  // Create the network parameters using the Relay server data
  var relayNetworkParameter = new RelayNetworkParameter{ ServerData = relayServerData };

  // Bind and listen to the Relay server
  yield return ServerBindAndListen(relayNetworkParameter);
}

以下の図は、Relay がホストプレイヤークライアントと利用可能地域間の QoS データに基づいて地域をどのように選択するかを示したものです。QoS サーバーを見つけられない場合や、測定データを収集できない場合、Relay はクライアントの位置情報を使用して最寄りの地域を選択します。クライアントの位置情報が特定できない場合、これはデフォルトの地域である Central US になります。