このトピックでは、SmartMatch を使用してマルチプレイヤー ゲームでプレイヤーをマッチングする方法について説明します。
フローチャート: SmartMatch マッチメイキング プロセス
マッチ チケット セッションおよびマッチ チケットの作成
セッションおよびプレイヤーへのマッチメイキング属性の設定
マッチの作成
マッチ チケットの維持
ゲーム セッションをマッチ チケット セッションとして再利用する
マッチ チケットの削除
XBOX Compute を使用したゲームのマッチメイキングの実行
関連項目
フローチャート: SmartMatch マッチメイキング プロセス
次のフローチャートは、SmartMatch マッチメイキング プロセスを示しています。
このトピックの先頭に戻る。
マッチ チケット セッションおよびマッチ チケットの作成
マッチメイキング プロセスが開始される前に、マッチメイキングの「スカウト」が、一緒にマッチメイキングに入りたい人々のグループを表すマッチ チケット セッションをセットアップします。
このグループの全プレイヤーは、XblMultiplayerSessionJoin を使用してセッションに参加します。
チケット セッションが作成されてプレイヤーが登録された後、タイトルは XblMatchmakingCreateMatchTicketAsync を使用して、セッションをマッチメイキング サービスに送信します。
このメソッドはチケット セッションを表すマッチ チケットを作成し、その後、チケット セッション内の /servers/matchmaking/properties/system/status フィールドを searching に更新します。
詳細については、Multiplayer タスク トピックの マッチ チケットの作成 セクションを参照してください。
マッチ チケット作成メソッドからの応答は XblCreateMatchTicketResponse オブジェクトです。
応答にはマッチ チケット ID が含まれます。これは、チケットを削除することでマッチメイキングをキャンセルするために使用できる GUID です。
応答には、プレイヤーに期待値を設定するために使用できるホッパーの平均待ち時間も含まれます。
このトピックの先頭に戻る。
セッションおよびプレイヤーへのマッチメイキング属性の設定
セッションをマッチメイキングに送信する際、タイトルは、マッチメイキング サービスがセッションを他のセッションとグループ化するために使用する属性を設定できます。
タイトルはチケット レベルまたはメンバーごとのレベルで属性を指定できます。
マッチ チケット レベルでのマッチメイキング属性の設定
タイトルは、XblMatchmakingCreateMatchTicketAsync メソッドの ticketAttributesJson パラメーターでマッチ チケット レベルの属性を送信します。
チケット レベルで指定された属性は、メンバーごとのレベルで指定された同じ属性をオーバーライドします。
メンバーごとのレベルでのマッチメイキング属性の設定
タイトルは、マッチ チケット セッション内の各メンバーにメンバーごとの属性を指定します。
これらの属性は、プロパティ名 matchAttrs を使用して XblMultiplayerSessionCurrentUserSetCustomPropertyJson を呼び出すことによって設定されます。
この呼び出しにより、属性はチケット セッション内の各プレイヤーの /members/{index}/properties/custom/matchAttrs フィールドに配置されます。
マッチメイキング プロセスは、ホッパーに対する XBOX services 構成でその属性に指定された flatten メソッドに基づいて、メンバーごとの属性をそれぞれ 1 つのチケット レベルの属性に「フラット化」します。
これは Partner Center で構成されます。
このトピックの先頭に戻る。
マッチの作成
チケット セッションとマッチ チケットがセットアップされると、マッチメイキング サービスは、他のグループを表す他のチケット セッションと該当するチケット セッションをマッチングし、マッチ ターゲット セッションを作成または特定します。
サービスはまた、ターゲット セッション内でマッチしたプレイヤーの予約を作成し、その後、チケット セッションにマッチ済みのマークを付けます。
Multiplayer Session Directory (MPSD) は、このチケット セッションへの変更をタイトルに通知します。
その後、タイトルは、十分な数のプレイヤーが存在することを確認するために、ターゲット セッションを初期化する手順を実行する必要があります。タイトルは、プレイヤーが相互に正常に接続できることを確認するために、サービス品質 (QoS) チェックを実行します。
初期化または QoS が失敗した場合、タイトルは、別のグループを見つけられるよう、チケット セッションにマッチメイキングへの再送信のためのマークを付けます。
詳細については、ターゲット セッションの初期化と QoS を参照してください。
マッチ アクティビティ中に、セッションの JSON オブジェクトに次の変更が加えられます。
-
/servers/matchmaking/properties/system/status フィールドが found に設定される
-
/servers/matchmaking/properties/system/targetSessionRef フィールドがターゲット セッションに設定される
-
各チケット セッションの
/members/{index}/properties/custom/matchAttrs フィールドが /members/{index}/constants/custom/matchmakingResult/playerAttrs フィールドにコピーされる
-
各プレイヤーについて、マッチ チケット内の
ticketAttributes フィールドからチケット属性が /members/{index}/constants/custom/matchmakingResult/ticketAttrs フィールドにコピーされる
このトピックの先頭に戻る。
マッチ チケットの維持
マッチメイキング サービスは、セッション用のマッチ チケットが作成された時点でのチケット セッションのスナップショットを使用します。
その結果、いずれかのプレイヤーがチケット セッションに参加または退出した場合、タイトルはマッチメイキング サービスを使用してマッチ チケットを削除し、再作成する必要があります。
このトピックの先頭に戻る。
ゲーム セッションをマッチ チケット セッションとして再利用する
preserveSession が Always に設定された 2 つのセッションは、結合できないため、互いにマッチできません。タイトルで使用されるマッチメイキング フローは、これを考慮する必要があります。
タイトルは、既存のゲーム セッションをマッチ チケット セッションとして再利用し、進行中のゲームに参加するプレイヤーをさらに検索できます。
これを有効にするには、タイトルは、preserveSession パラメーターを XblPreserveSessionMode::Always に設定して XblMatchmakingCreateMatchTicketAsync を呼び出して、マッチ チケットを作成する必要があります。
その後、マッチメイキング サービスは、チケットに使用される既存のセッションがマッチメイキング プロセス全体で保持され、結果のターゲット セッションになることを保証します。
このトピックの先頭に戻る。
マッチ チケットの削除
マッチ チケットを削除するには、タイトルは XblMatchmakingDeleteMatchTicketAsync を呼び出します。
チケットを削除すると:
-
チケット セッション内のプレイヤーのマッチメイキングが停止します。
-
チケット セッション内の
/servers/matchmaking/properties/system/status フィールドが canceled に更新されます。
このトピックの先頭に戻る。
XBOX Compute を使用したゲームのマッチメイキングの実行
以下は、プレイヤーが XBOX Compute ベースのゲームにマッチメイキングされるための概略の手順です。
サード パーティによってホストされるゲームにも同様のフローが適用されるはずです。
-
スカウトは、グループを表すチケット セッションを作成します。このセッションには、
/constants/system/measurementServerAddresses のセッション構成にある候補のデータセンターの一覧が含まれます。これは、データセンター一覧が静的である場合はセッション テンプレートから、そうでない場合はクライアントが最初に XBOX Compute から取得した後にセッション作成時にセッションに書き込むことによって取得されます。このセッションには、targetSessionConstants/custom/gameServerPlatform オブジェクト内の gsiSetId、gameVariantId、および maxAllowedPlayers の値も含まれます。
-
グループ内の他のすべてのプレイヤーがチケット セッションに参加します。
-
グループのすべてのメンバーは、チケット セッションの
/constants/system オブジェクトから measurementServerAddresses の値をダウンロードし、プラットフォーム API を使用して ping を送信し、次に、/members/{index}/properties/system/serverMeasurements で定義されているように優先データセンターの順序付きリストをセッションにアップロードします。
[!NOTE]
タイトルは、XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson メソッドと XblMultiplayerSessionConstants::MeasurementServerAddressesJson を使用して、セッションから measurementServerAddresses の値を設定および取得できます。
-
スカウトは XblMatchmakingCreateMatchTicketAsync を呼び出し、チケット セッションへの参照を渡します。
[!NOTE]
チケット セッション オブジェクトに一致しない定数がある場合、チケット作成メソッドが成功しない可能性があります。これは、定数が一致しないプレイヤーとマッチしないようにするために、ホッパーに MUST ルールを追加することで回避できます。
XblMatchTicketDetailsResponse::PreserveSession が Never に設定されている場合、マッチメイキング サービスは、各メンバーからのサーバー測定値をチケットの内部表現にコピーします。
チケットのメンバーのサーバー測定値をフラット化して、special チケット属性としてチケットの内部表現に格納される、チケット用の 1 つのサーバー測定値コレクションを作成します。
XblMatchTicketDetailsResponse::PreserveSession が Always に設定されている場合、サーバー測定値は使用されません。
代わりに、マッチメイキング サービスは、セッションの /properties/system/matchmaking/serverConnectionString の値を、遅延がゼロのサイズ 1 の serverMeasurements コレクションとしてチケットの内部表現にコピーします。
-
マッチメイキング サービスは、サーバー測定値のコレクションを考慮に入れて、他のグループを表す他のチケット セッションとチケット セッションをマッチングします。サービスは、そのグループを、同じく高く優先されるデータセンターを持つ他のグループとマッチングしようとします。
-
マッチしたグループが見つかると、マッチメイキング サービスはターゲット セッションを作成または特定し、一緒にマッチしたチケット セッションのすべてのプレイヤーを追加します。サービスは、マッチしたグループの最終的なフラット化されたサーバー測定値を
/properties/system/serverConnectionStringCandidates に書き込みます。ターゲット セッション内の新たに追加された各メンバーの、当初に送信されたサーバー測定値を /members/{index}/constants/system/matchmakingResult/serverMeasurements に書き込みます。
-
すべてのプレイヤーが、前述したようにターゲット セッションで初期化を実行します。ただし、プレイヤーは XBOX Compute に接続するため、接続性を確認するために互いに QoS を実行することはありません。
-
すべてのプレイヤーがプレイします。
このトピックの先頭に戻る。
関連項目
マッチメイキングの概要