SmartMatch マッチメイキングの使用
このトピックでは、マルチプレイヤー ゲームでプレイヤーをマッチングするために SmartMatch を使用する方法について説明します。
フローチャート: SmartMatch マッチメイキングのプロセス
マッチ チケット セッションとマッチ チケットの作成
セッションおよびプレイヤーでのマッチメイキング属性の設定
マッチの実行
マッチ チケットの維持
マッチ チケット セッションとしてのゲーム セッションの再利用
マッチ チケットの削除
Xbox Live エンジンを使用したゲームのマッチメイキングの実行
関連項目
フローチャート: 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
preserveSession
が Always
に設定された 2 つのセッションは、組み合わせることができないので、互いにマッチングすることができません。 タイトルで使用されるマッチメイキング フローではこの事実を考慮に入れる必要があります。
タイトルはマッチ チケット セッションとしての既存のゲーム セッションを再利用し、既に進行中のゲームに参加する追加のプレイヤーを見つけることができます。
この機能を有効にするには、タイトルは preserveSession
パラメーターを XblPreserveSessionMode::Always
に設定して XblMatchmakingCreateMatchTicketAsync を呼び出し、マッチ チケットを作成する必要があります。
これにより、マッチメイキング サービスは、チケットに使用されている既存のセッションがマッチメイキング プロセス全体を通じて保持され、結果としてターゲット セッションになるようにします。
マッチ チケットの削除
マッチ チケットを削除するため、タイトルは XblMatchmakingDeleteMatchTicketAsync を呼び出します。 チケットの削除:
チケット セッションでプレイヤーのマッチメイキングを停止します。
チケット セッションの
/servers/matchmaking/properties/system/status
フィールドをcanceled
に更新します。
Xbox Live エンジンを使用したゲームのマッチメイキングの実行
次に、 Xbox エンジン ベース ゲームでプレイヤーをマッチメイキングする際に行われる手順の概要を示します。 サード パーティーによってホストされるゲームにも、類似のフローが当てはまるはずです。
スカウトは、グループを表すためのチケット セッションを作成します。 このセッションには、候補となるデータセンターのリストが含まれます。このリストは、
/constants/system/measurementServerAddresses
のセッション構成内にあります。 これは、データセンターの一覧が静的な場合はセッション テンプレートから、または最初に Xbox Compute から取得した後のセッション作成時に書き込むクライアントから取得されます。 このセッションには、targetSessionConstants/custom/gameServerPlatform
オブジェクトのgsiSetId
、gameVariantId
、maxAllowedPlayers
の値も含まれています。グループに属する他のすべてのプレイヤーがチケット セッションに参加します。
グループのすべてのメンバーは、
/members/{index}/properties/system/serverMeasurements
で定義されているように、チケット セッションの/constants/system
オブジェクトからmeasurementServerAddresses
値をダウンロードし、プラットフォーム API を使用してそれらに ping を実行して、優先するデータセンターの順序付きリストをセッションにアップロードします。注意
タイトルは、XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson メソッドと XblMultiplayerSessionConstants
::MeasurementServerAddressesJson
を使用して、セッションからmeasurementServerAddresses
値を設定および取得できます。スカウトは XblMatchmakingCreateMatchTicketAsync を呼び出し、チケット セッションへの参照を渡します。
注意
チケット セッション オブジェクトの定数が一致していない場合、チケット作成メソッドは失敗する可能性があります。 これは、定数が一致しないプレイヤーとのマッチングを防ぐため、ホッパに
MUST
ルールを追加すれば回避できます。XblMatchTicketDetailsResponse
::PreserveSession
がNever
に設定された場合、マッチメイキング サービスは各メンバーのサーバーの測定値をチケットの内部表現にコピーします。 サービスは、チケットのメンバーのサーバー測定値を、チケットの単一のサーバー測定値コレクションに均一化します。このコレクションは、special
チケット属性としてチケットの内部表現に格納されます。XblMatchTicketDetailsResponse
::PreserveSession
がAlways
に設定されている場合、サーバーの測定値は使用されません。 代わりに、マッチメイキング サービスでは、セッションの/properties/system/matchmaking/serverConnectionString
値が、サイズ 1 で遅延ゼロのserverMeasurements
コレクションとしてチケットの内部表現にコピーされます。マッチメイキング サービスでは、サーバー測定値コレクションを考慮に入れて、チケット セッションが他のグループを表すその他のチケット セッションとマッチングされます。 このサービスは、同じ優先度のデータセンターのグループ間でマッチングしようとします。
マッチしたグループが見つかったら、マッチメイキング サービスではターゲット セッションが作成または識別され、一緒にマッチされたチケット セッションのすべてのプレイヤーが追加されます。 サービスでは、マッチされたグループの最終的に均一化されたサーバー測定値が
/properties/system/serverConnectionStringCandidates
に書き込まれます。 ターゲット セッションで新しく追加されたメンバーごとに、最初に送信されたサーバー測定値が/members/{index}/constants/system/matchmakingResult/serverMeasurements
に書き込まれます。すべてのプレイヤーは、前述のように、ターゲット セッションで初期化を実行します。 ただし、プレイヤーは Xbox エンジンに接続するため、相互に QoS を実行して接続を確認することはありません。
すべてにプレイヤーがプレイします。