次の方法で共有


SmartMatch マッチメイキングの使用

このトピックでは、マルチプレイヤー ゲームでプレイヤーをマッチングするために SmartMatch を使用する方法について説明します。

フローチャート: SmartMatch マッチメイキングのプロセス
マッチ チケット セッションとマッチ チケットの作成
セッションおよびプレイヤーでのマッチメイキング属性の設定
マッチの実行
マッチ チケットの維持
マッチ チケット セッションとしてのゲーム セッションの再利用
マッチ チケットの削除
Xbox Live エンジンを使用したゲームのマッチメイキングの実行
関連項目

フローチャート: SmartMatch マッチメイキングのプロセス

次のフロー チャートは、SmartMatch マッチメイキングのプロセスを示しています。

SmartMatch マッチメイキングのプロセスを示すマッチメイキングのフロー チャートのイメージ

このトピックの先頭に戻る。

マッチ チケット セッションとマッチ チケットの作成

マッチメイキングを開始する前に、マッチメイキング "スカウト" が、マッチメイキングに一緒に参加することを希望するユーザーのグループを表す、マッチ チケット セッションを設定します。 このグループのすべてのプレイヤーは XblMultiplayerSessionJoin を使用してセッションに参加します。

チケット セッションが作成され、プレイヤーが参加したら、タイトルは XblMatchmakingCreateMatchTicketAsync を使用して、マッチメイキング サービスにセッションを送信します。 このメソッドは、チケット セッションを表すマッチ チケットを作成し、チケット セッション内の /servers/matchmaking/properties/system/status フィールドを searching に更新します。 詳細については、マルチプレイヤー タスクのトピックの「マッチ チケットの作成」セクションを参照してください。

マッチ チケットの作成メソッドからの応答は、XblCreateMatchTicketResponse オブジェクトです。 応答にはマッチ チケット ID が含まれています。 これは、チケットを削除することによってマッチメイキングをキャンセルするために使用できる GUID です。 応答にはホッパーの平均待ち時間の情報も含まれ、この情報を使ってプレイヤーの期待を設定できます。

このトピックの先頭に戻る。

セッションおよびプレイヤーでのマッチメイキング属性の設定

マッチメイキングへセッションを送信するとき、タイトルは、マッチメイキング サービスがセッションを他のセッションとグループ化するために使用する属性を設定できます。 タイトルは、チケット レベルまたはメンバーごとのレベルで属性を指定できます。

マッチ チケット レベルでのマッチメイキング属性の設定

タイトルは、XblMatchmakingCreateMatchTicketAsync メソッドの ticketAttributesJson パラメーターのマッチ チケット レベルで属性を送信します。 チケット レベルで指定した属性は、メンバーごとのレベルで指定された同じ属性を上書きします。

メンバーごとのレベルでのマッチメイキング属性の設定

タイトルは、マッチ チケット セッション内の各メンバーにメンバーごとの属性を指定します。 これらの属性は、matchAttrs というプロパティ名を使用して XblMultiplayerSessionCurrentUserSetCustomPropertyJson を呼び出すことによって行います。 この呼び出しは、チケット セッション内の各プレイヤーの /members/{index}/properties/custom/matchAttrs フィールドに属性を配置します。

マッチメイキング プロセスは、メンバーごとの各属性を、ホッパーの Xbox サービス 構成でその属性に対して指定した flatten メソッドに基づいて、単一のチケット レベルの属性に「均一化」します。 これは、パートナー センターで構成します。

このトピックの先頭に戻る。

マッチの実行

設定されたチケット セッションとマッチ チケットを使用して、マッチメイキング サービスは、表されたチケット セッションを他のグループを表す他のチケット セッションとマッチさせ、マッチ ターゲット セッションを作成または識別します。 また、サービスは、ターゲット セッションでマッチされたプレイヤーの予約を作成し、チケット セッションをマッチ済みとしてマークします。 Multiplayer Session Directory (MPSD) は、チケット セッションへのこの変更をタイトルに通知します。

次にタイトルは、十分なプレイヤーが現れたことを確認するためにターゲット セッションを初期化する手順を実行する必要があります。 また、タイトルは、サービスの品質 (QoS) チェックを実行してプレイヤーが互いに正しく接続できることを確認します。 初期化や QoS が失敗した場合、タイトルは、別のグループを見つけることができるよう、マッチメイキングに再送信するようにチケット セッションをマークします。 詳細については、「ターゲット セッションの初期化と QoS」を参照してください。

マッチ アクティビティ中、以下の変更がセッションの JSON オブジェクトに対して行われます。

  • /servers/matchmaking/properties/system/status フィールドは found に設定されます

  • /servers/matchmaking/properties/system/targetSessionRef フィールドはターゲット セッションに設定されます

  • /members/{index}/constants/custom/matchmakingResult/playerAttrs フィールド (各チケット セッション用) は /members/{index}/properties/custom/matchAttrs フィールドにコピーされます

  • 各プレイヤーについて、チケット属性がマッチ チケット内の ticketAttributes フィールドから /members/{index}/constants/custom/matchmakingResult/ticketAttrs フィールドにコピーされます

このトピックの先頭に戻る。

マッチ チケットの維持

マッチメイキング サービスは、マッチ チケットがセッションに対して作成されたときのチケット セッションのスナップショットを使用します。 その結果、プレイヤーがチケット セッションに参加した場合やマッチ チケット セッションを抜けた場合、タイトルはマッチメイキング サービスを使用してマッチ チケットを削除し作成しなおす必要があります。

このトピックの先頭に戻る。

マッチ チケット セッションとしてのゲーム セッションの再利用

Important

preserveSessionAlways に設定された 2 つのセッションは、組み合わせることができないので、互いにマッチングすることができません。 タイトルで使用されるマッチメイキング フローではこの事実を考慮に入れる必要があります。

タイトルはマッチ チケット セッションとしての既存のゲーム セッションを再利用し、既に進行中のゲームに参加する追加のプレイヤーを見つけることができます。 この機能を有効にするには、タイトルは preserveSession パラメーターを XblPreserveSessionMode::Always に設定して XblMatchmakingCreateMatchTicketAsync を呼び出し、マッチ チケットを作成する必要があります。 これにより、マッチメイキング サービスは、チケットに使用されている既存のセッションがマッチメイキング プロセス全体を通じて保持され、結果としてターゲット セッションになるようにします。

このトピックの先頭に戻る。

マッチ チケットの削除

マッチ チケットを削除するため、タイトルは XblMatchmakingDeleteMatchTicketAsync を呼び出します。 チケットの削除:

  1. チケット セッションでプレイヤーのマッチメイキングを停止します。

  2. チケット セッションの /servers/matchmaking/properties/system/status フィールドを canceled に更新します。

このトピックの先頭に戻る。

Xbox Live エンジンを使用したゲームのマッチメイキングの実行

次に、 Xbox エンジン ベース ゲームでプレイヤーをマッチメイキングする際に行われる手順の概要を示します。 サード パーティーによってホストされるゲームにも、類似のフローが当てはまるはずです。

  1. スカウトは、グループを表すためのチケット セッションを作成します。 このセッションには、候補となるデータセンターのリストが含まれます。このリストは、/constants/system/measurementServerAddresses のセッション構成内にあります。 これは、データセンターの一覧が静的な場合はセッション テンプレートから、または最初に Xbox Compute から取得した後のセッション作成時に書き込むクライアントから取得されます。 このセッションには、targetSessionConstants/custom/gameServerPlatform オブジェクトの gsiSetIdgameVariantIdmaxAllowedPlayers の値も含まれています。

  2. グループに属する他のすべてのプレイヤーがチケット セッションに参加します。

  3. グループのすべてのメンバーは、/members/{index}/properties/system/serverMeasurements で定義されているように、チケット セッションの /constants/system オブジェクトから measurementServerAddresses 値をダウンロードし、プラットフォーム API を使用してそれらに ping を実行して、優先するデータセンターの順序付きリストをセッションにアップロードします。

    注意

    タイトルは、XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson メソッドと XblMultiplayerSessionConstants::MeasurementServerAddressesJson を使用して、セッションから measurementServerAddresses 値を設定および取得できます。

  4. スカウトは XblMatchmakingCreateMatchTicketAsync を呼び出し、チケット セッションへの参照を渡します。

    注意

    チケット セッション オブジェクトの定数が一致していない場合、チケット作成メソッドは失敗する可能性があります。 これは、定数が一致しないプレイヤーとのマッチングを防ぐため、ホッパに MUST ルールを追加すれば回避できます。

    XblMatchTicketDetailsResponse::PreserveSessionNever に設定された場合、マッチメイキング サービスは各メンバーのサーバーの測定値をチケットの内部表現にコピーします。 サービスは、チケットのメンバーのサーバー測定値を、チケットの単一のサーバー測定値コレクションに均一化します。このコレクションは、special チケット属性としてチケットの内部表現に格納されます。

    XblMatchTicketDetailsResponse::PreserveSessionAlways に設定されている場合、サーバーの測定値は使用されません。 代わりに、マッチメイキング サービスでは、セッションの /properties/system/matchmaking/serverConnectionString 値が、サイズ 1 で遅延ゼロの serverMeasurements コレクションとしてチケットの内部表現にコピーされます。

  5. マッチメイキング サービスでは、サーバー測定値コレクションを考慮に入れて、チケット セッションが他のグループを表すその他のチケット セッションとマッチングされます。 このサービスは、同じ優先度のデータセンターのグループ間でマッチングしようとします。

  6. マッチしたグループが見つかったら、マッチメイキング サービスではターゲット セッションが作成または識別され、一緒にマッチされたチケット セッションのすべてのプレイヤーが追加されます。 サービスでは、マッチされたグループの最終的に均一化されたサーバー測定値が /properties/system/serverConnectionStringCandidates に書き込まれます。 ターゲット セッションで新しく追加されたメンバーごとに、最初に送信されたサーバー測定値が /members/{index}/constants/system/matchmakingResult/serverMeasurements に書き込まれます。

  7. すべてのプレイヤーは、前述のように、ターゲット セッションで初期化を実行します。 ただし、プレイヤーは Xbox エンジンに接続するため、相互に QoS を実行して接続を確認することはありません。

  8. すべてにプレイヤーがプレイします。

このトピックの先頭に戻る。

関連項目

マッチメイキングの概要