注釈:本資料は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 host、port、username、secret、password は任意です。これらの設定は、TURN サーバーに静的認証キーを使用する場合にのみ使用します。この例では動的認証キーを使用するため、これらの設定は空のままにします。

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 の選択に渡すことができます。

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 サーバーを一覧表示し、各リージョンへのレイテンシを確認してください。