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

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

Unity SDKを使用したマッチメイキングの設定

ゲームにマッチメイキングを実装するには、以下の手順に従ってください。

マッチメイキングの開始

  • ゲームで使用する適切な権限を持つIAM Clientsを設定していることを確認してください。アプリケーションのアクセス制御を管理するの記事の手順に従ってください。

  • P2P関連の設定を有効にします。以下の画像に示されている通りの設定を使用できます。この設定を使用することをお勧めします。turn manager server URLについては、環境固有のURLに変更してください。Turn server hostportusernamesecretpasswordはオプションです。これらの設定は、TURNサーバーに静的認証キーを使用する場合にのみ使用されます。この例では、動的認証キーを使用し、前述の設定は空のままにします。

AccelByte Configuration screen

AccelByteネットワークトランスポートの初期化とネットワークイベントのリッスン

ゲームクライアントのネットワークトランスポートを初期化する前に、AGSにログインし、最初にロビーに接続する必要があります。以下のスニペットコードは、接続とネットワークトランスポートの初期化方法を示しています。

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();
});

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

Network Transport step

マッチメイキングの開始、ゲームセッションへの参加、P2P接続の開始

以下は、マッチメイキングを開始するためのスニペットコードです。

var apiClient = AccelByteSDK.GetClientRegistry().GetApi();
var lobby = apiClient.GetLobby();
var session = apiClient.GetSession();
var matchmaking = apiClient.GetMatchmakingV2();

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

// この通知は、パーティーリーダーがマッチメイキングを開始した後に受信されます
lobby.MatchmakingV2MatchmakingStarted += result =>
{
if (result.IsError)
{
// MatchmakingV2MatchmakingStartedエラーを処理します
Debug.Log($"Error MatchmakingV2MatchmakingStarted, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}

// MatchmakingV2MatchmakingStarted成功を処理します
Debug.Log($"Matchmaking started: {result.Value.ticketId}");
};

// この通知は、マッチが見つかった後に受信されます
lobby.MatchmakingV2MatchFound += result =>
{
if (result.IsError)
{
// MatchmakingV2MatchFoundエラーを処理します
Debug.Log($"Error MatchmakingV2MatchFound, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}

// MatchmakingV2MatchFound成功を処理します
Debug.Log($"Match found: {result.Value.id} {result.Value.matchPool}");
};

// この通知は、マッチが見つかり、ゲームクライアントがそれを受け入れることができる後に受信されます
lobby.SessionV2InvitedUserToGameSession += result =>
{
if (result.IsError)
{
// SessionV2InvitedUserToGameSessionエラーを処理します
Debug.Log($"Error SessionV2InvitedUserToGameSession, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}

// SessionV2InvitedUserToGameSession成功を処理します
Debug.Log($"Invited to a game session {result.Value.sessionId}");

session.JoinGameSession(result.Value.sessionId, joinGameSessionResult =>
{
if (joinGameSessionResult.IsError)
{
// JoinGameSessionエラーを処理します
Debug.Log($"Error joinGameSessionResult, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}

// JoinGameSession成功を処理します
Debug.Log($"Successfully joined game session {joinGameSessionResult.Value.id}");

// 現在のユーザーがゲームセッションのリーダーである場合(このユーザーがゲームに最初に参加したことを意味します)、ホストとして開始します
string gameSessionLeaderId = joinGameSessionResult.Value.leaderId;
if (gameSessionLeaderId == "current-user-member-id")
{
transportManager.StartServer();
}
else
{
transportManager.SetTargetHostUserId(gameSessionLeaderId);
transportManager.StartClient();
}
});
};

// マッチメイキングを開始します
var matchpoolName = "matchpool-name";
var optionalParams = new MatchmakingV2CreateTicketRequestOptionalParams();
matchmaking.CreateMatchmakingTicket(matchpoolName, optionalParams, result =>
{
if (result.IsError)
{
// CreateMatchmakingTicketエラーを処理します
Debug.Log($"Error CreateMatchmakingTicket, Error Code: {result.Error.Code} Error Message: {result.Error.Message}");
return;
}

// CreateMatchmakingTicket成功を処理します
Debug.Log($"Successfully created matchmaking ticket {result.Value.matchTicketId}");
});

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);