メインコンテンツまでスキップ
Last updated on August 3, 2026

注釈:本資料はAI技術を用いて翻訳されています。

Unity SDK を使用して P2P トランスポートを設定する

このガイドでは、マッチングされたゲームセッション向けに、Unity の P2P 固有のトランスポート設定とホスト接続動作について説明します。

マッチチケットの作成、マッチ結果の処理、ゲームセッションへの参加を含む共通の Matchmaking フローについては、マッチメイキングを統合する (Unity)を参照してください。そのガイドのホスト接続手順に到達したら、P2P タブを選択し、トランスポートの前提条件としてこのページを使用してください。

前提条件

  • P2P セッションタイプのセッションテンプレートを使用するようにマッチプールを設定します。P2P を設定するを参照してください。
  • Matchmaking、Session V2、Lobby、TURN Manager に必要な権限を持つ IAM Clients を設定します。アプリケーションのアクセス制御を管理するの手順に従ってください。
  • AGS Unity SDK 設定で P2P 関連設定を有効にします。Turn Manager server URL は環境固有の URL に変更してください。Turn server hostportusernamesecretpassword は任意です。これらの設定は、TURN サーバーに静的認証キーを使用する場合にのみ使用します。この例では動的認証キーを使用するため、これらの設定は空のままにします。

AccelByte Configuration screen

AccelByte ネットワークトランスポートを初期化する

ゲームクライアントのネットワークトランスポートを初期化する前に、AGS にログインし、先に Lobby に接続してください。次のスニペットは、接続とネットワークトランスポートの初期化方法を示しています。

var apiClient = AccelByteSDK.GetClientRegistry().GetApi();
var user = apiClient.GetUser();
var lobby = apiClient.GetLobby();

AccelByteNetworkTransportManager transportManager = gameObject.AddComponent<AccelByteNetworkTransportManager>();

lobby.Connected += () =>
{
transportManager.Initialize(apiClient);
};

user.LoginWithEmailV4("email", "password", result =>
{
if (result.IsError)
{
Debug.Log($"Login Failed: {result.Error.error_description}");
return;
}

lobby.Connect();
});

シーンの singleton に Unity Netcode がある場合、コンポーネント参照を NetworkTransport の選択に渡すことができます。

Network Transport step

P2P ゲームセッション参加後に接続する

共通の Matchmaking フローでゲームセッションに参加した後、ゲームセッションリーダー ID と現在のプレイヤー ID を比較します。リーダーはホストとして開始します。他のメンバーはリーダーを接続先としてクライアントとして開始します。

string gameSessionLeaderId = joinGameSessionResult.Value.leaderId;
string currentUserId = GetCurrentAccelByteUserId();

if (gameSessionLeaderId == currentUserId)
{
transportManager.StartServer();
}
else
{
transportManager.SetTargetHostUserId(gameSessionLeaderId);
transportManager.StartClient();
}

GetCurrentAccelByteUserId() は、認証済み AGS ユーザーセッションのユーザー ID に置き換えてください。

注記

ローカルプレイヤーフローでは、初期化済みの AccelByteNetworkTransportManager を 1 つ維持してください。本番シーンでは、トランスポートを一度だけ初期化し、Lobby コールバックを一度だけ登録し、シーンまたはオブジェクトが破棄されるときにコールバックを解除してください。

Unity Netcode を使用せずにピアにデータを送信する

ピアにデータを送信するには、ゲームクライアントで次のメソッドを使用します。

byte[] data = System.Text.Encoding.ASCII.GetBytes("sample data");
ulong peerId = 0;
transportManager.Send(peerId, new ArraySegment<byte>(data), NetworkDelivery.Reliable);

Unity Netcode を使用せずにピアからデータを受信する

ピアからデータを受信するには、以前に登録した OnTransportEvent のコールバックをリッスンするようにゲームクライアントを設定するか、次のメソッドを使用してイベントをポーリングできます。

var networkEvent = transportManager.PollEvent(out ulong clientId, out ArraySegment<byte> payload, out float receiveTime);

トラブルシューティング

  • P2P 接続が確立されたかどうかを確認するには、ICE/WebRTC data channel から発火される transport event を確認します。OnTransportEvent をリッスンするか transportManager.PollEvent(...) をポーリングし、NetworkEvent.Connect を、ピア接続が確立されたことを示すネットワークレベルのシグナルとして扱います。Lobby websocket の接続や JoinGameSession() の成功は、サービスまたはセッションへの接続を確認するだけで、P2P data channel が接続されたことは証明しません。NetworkEvent.Connect を受信した後、小さな gameplay ping を送信して双方向トラフィックを検証できます。
  • 誤ったプレイヤーがホストとして開始する場合は、leaderId と比較している値が現在の AGS ユーザー ID または SDK バージョンで期待される member ID であることを確認してください。
  • クライアントがゲームセッションに参加できてもゲームプレイトラフィックを交換できない場合は、Unity Netcode の transport selection、TURN Manager server URL、AccelByte SDK 設定の P2P 設定を確認してください。
  • リレー動作が不安定な場合は、TURN Manager API を使用して利用可能な TURN サーバーを一覧表示し、各リージョンへのレイテンシを確認してください。