> ## Documentation Index
> Fetch the complete documentation index at: https://docs.xbox.com/llms.txt
> Use this file to discover all available pages before exploring further.

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

> XBOX SmartMatch マッチメイキングを使用して、マッチ チケット セッションの作成、プレイヤー属性の設定、QoS の管理、およびマルチプレイヤー タイトルでのゲーム セッションの再利用を行います。

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

[フローチャート: SmartMatch マッチメイキング プロセス](#flow-chart-smartmatch-matchmaking-process)
[マッチ チケット セッションおよびマッチ チケットの作成](#creating-a-match-ticket-session-and-a-match-ticket)
[セッションおよびプレイヤーへのマッチメイキング属性の設定](#setting-matchmaking-attributes-on-the-session-and-players)
[マッチの作成](#making-the-match)
[マッチ チケットの維持](#maintaining-the-match-ticket)
[ゲーム セッションをマッチ チケット セッションとして再利用する](#reusing-the-game-session-as-a-match-ticket-session)
[マッチ チケットの削除](#deleting-the-match-ticket)
[XBOX Compute を使用したゲームのマッチメイキングの実行](#performing-matchmaking-for-games-using-xbox-live-compute)
[関連項目](#see-also)

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

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

![SmartMatch マッチメイキング プロセスを示すマッチメイキング フローチャートの画像](https://mintcdn.com/microsoft-4404708b/gzrdvT5kpqAXKEQt/images/gdk/services/Multiplayer_2015_SmartMatch_Matchmaking.png?fit=max\&auto=format\&n=gzrdvT5kpqAXKEQt\&q=85\&s=2754663723a8fc3a3214f997266f015c)

[このトピックの先頭に戻る。](#top)

## マッチ チケット セッションおよびマッチ チケットの作成

マッチメイキング プロセスが開始される前に、マッチメイキングの「スカウト」が、一緒にマッチメイキングに入りたい人々のグループを表すマッチ チケット セッションをセットアップします。
このグループの全プレイヤーは、[XblMultiplayerSessionJoin](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionjoin.md) を使用してセッションに参加します。

チケット セッションが作成されてプレイヤーが登録された後、タイトルは [XblMatchmakingCreateMatchTicketAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync.md) を使用して、セッションをマッチメイキング サービスに送信します。
このメソッドはチケット セッションを表すマッチ チケットを作成し、その後、チケット セッション内の `/servers/matchmaking/properties/system/status` フィールドを `searching` に更新します。
詳細については、Multiplayer タスク トピックの [マッチ チケットの作成](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/mpsd/how-to/live-mpsd-how-tos.md#camt) セクションを参照してください。

マッチ チケット作成メソッドからの応答は [XblCreateMatchTicketResponse](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/structs/xblcreatematchticketresponse.md) オブジェクトです。
応答にはマッチ チケット ID が含まれます。これは、チケットを削除することでマッチメイキングをキャンセルするために使用できる GUID です。
応答には、プレイヤーに期待値を設定するために使用できるホッパーの平均待ち時間も含まれます。

[このトピックの先頭に戻る。](#top)

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

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

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

タイトルは、[XblMatchmakingCreateMatchTicketAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync.md) メソッドの `ticketAttributesJson` パラメーターでマッチ チケット レベルの属性を送信します。
チケット レベルで指定された属性は、メンバーごとのレベルで指定された同じ属性をオーバーライドします。

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

タイトルは、マッチ チケット セッション内の各メンバーにメンバーごとの属性を指定します。
これらの属性は、プロパティ名 `matchAttrs` を使用して [XblMultiplayerSessionCurrentUserSetCustomPropertyJson](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessioncurrentusersetcustompropertyjson.md) を呼び出すことによって設定されます。
この呼び出しにより、属性はチケット セッション内の各プレイヤーの `/members/{index}/properties/custom/matchAttrs` フィールドに配置されます。

マッチメイキング プロセスは、ホッパーに対する XBOX services 構成でその属性に指定された `flatten` メソッドに基づいて、メンバーごとの属性をそれぞれ 1 つのチケット レベルの属性に「フラット化」します。
これは [Partner Center](https://partner.microsoft.com/dashboard) で構成されます。

[このトピックの先頭に戻る。](#top)

## マッチの作成

チケット セッションとマッチ チケットがセットアップされると、マッチメイキング サービスは、他のグループを表す他のチケット セッションと該当するチケット セッションをマッチングし、マッチ ターゲット セッションを作成または特定します。
サービスはまた、ターゲット セッション内でマッチしたプレイヤーの予約を作成し、その後、チケット セッションにマッチ済みのマークを付けます。
Multiplayer Session Directory (MPSD) は、このチケット セッションへの変更をタイトルに通知します。

その後、タイトルは、十分な数のプレイヤーが存在することを確認するために、ターゲット セッションを初期化する手順を実行する必要があります。タイトルは、プレイヤーが相互に正常に接続できることを確認するために、サービス品質 (QoS) チェックを実行します。
初期化または QoS が失敗した場合、タイトルは、別のグループを見つけられるよう、チケット セッションにマッチメイキングへの再送信のためのマークを付けます。
詳細については、[ターゲット セッションの初期化と QoS](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/concepts/live-matchmaking-target-session.md) を参照してください。

マッチ アクティビティ中に、セッションの 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` フィールドにコピーされる

[このトピックの先頭に戻る。](#top)

## マッチ チケットの維持

マッチメイキング サービスは、セッション用のマッチ チケットが作成された時点でのチケット セッションのスナップショットを使用します。
その結果、いずれかのプレイヤーがチケット セッションに参加または退出した場合、タイトルはマッチメイキング サービスを使用してマッチ チケットを削除し、再作成する必要があります。

[このトピックの先頭に戻る。](#top)

## ゲーム セッションをマッチ チケット セッションとして再利用する

> [!NOTE]
>
> `preserveSession` が `Always` に設定された 2 つのセッションは、結合できないため、互いにマッチできません。タイトルで使用されるマッチメイキング フローは、これを考慮する必要があります。

タイトルは、既存のゲーム セッションをマッチ チケット セッションとして再利用し、進行中のゲームに参加するプレイヤーをさらに検索できます。
これを有効にするには、タイトルは、`preserveSession` パラメーターを [XblPreserveSessionMode](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/enums/xblpreservesessionmode.md)`::Always` に設定して [XblMatchmakingCreateMatchTicketAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync.md) を呼び出して、マッチ チケットを作成する必要があります。
その後、マッチメイキング サービスは、チケットに使用される既存のセッションがマッチメイキング プロセス全体で保持され、結果のターゲット セッションになることを保証します。

[このトピックの先頭に戻る。](#top)

## マッチ チケットの削除

マッチ チケットを削除するには、タイトルは [XblMatchmakingDeleteMatchTicketAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingdeletematchticketasync.md) を呼び出します。
チケットを削除すると:

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

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

[このトピックの先頭に戻る。](#top)

## XBOX Compute を使用したゲームのマッチメイキングの実行

以下は、プレイヤーが XBOX Compute ベースのゲームにマッチメイキングされるための概略の手順です。
サード パーティによってホストされるゲームにも同様のフローが適用されるはずです。

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

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

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

   > [!NOTE]
   >
   > タイトルは、[XblMultiplayerSessionConstantsSetMeasurementServerAddressesJson](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/multiplayer_c/functions/xblmultiplayersessionconstantssetmeasurementserveraddressesjson.md) メソッドと [XblMultiplayerSessionConstants](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/multiplayer_c/structs/xblmultiplayersessionconstants.md)`::MeasurementServerAddressesJson` を使用して、セッションから `measurementServerAddresses` の値を設定および取得できます。

4. スカウトは [XblMatchmakingCreateMatchTicketAsync](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/functions/xblmatchmakingcreatematchticketasync.md) を呼び出し、チケット セッションへの参照を渡します。

   > [!NOTE]
   >
   > チケット セッション オブジェクトに一致しない定数がある場合、チケット作成メソッドが成功しない可能性があります。これは、定数が一致しないプレイヤーとマッチしないようにするために、ホッパーに `MUST` ルールを追加することで回避できます。

   [XblMatchTicketDetailsResponse](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/structs/xblmatchticketdetailsresponse.md)`::PreserveSession` が `Never` に設定されている場合、マッチメイキング サービスは、各メンバーからのサーバー測定値をチケットの内部表現にコピーします。
   チケットのメンバーのサーバー測定値をフラット化して、`special` チケット属性としてチケットの内部表現に格納される、チケット用の 1 つのサーバー測定値コレクションを作成します。

   [XblMatchTicketDetailsResponse](https://docs.xbox.com/ja-jp/reference/live/xsapi-c/matchmaking_c/structs/xblmatchticketdetailsresponse.md)`::PreserveSession` が `Always` に設定されている場合、サーバー測定値は使用されません。
   代わりに、マッチメイキング サービスは、セッションの `/properties/system/matchmaking/serverConnectionString` の値を、遅延がゼロのサイズ 1 の `serverMeasurements` コレクションとしてチケットの内部表現にコピーします。

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

6. マッチしたグループが見つかると、マッチメイキング サービスはターゲット セッションを作成または特定し、一緒にマッチしたチケット セッションのすべてのプレイヤーを追加します。サービスは、マッチしたグループの最終的なフラット化されたサーバー測定値を `/properties/system/serverConnectionStringCandidates` に書き込みます。ターゲット セッション内の新たに追加された各メンバーの、当初に送信されたサーバー測定値を `/members/{index}/constants/system/matchmakingResult/serverMeasurements` に書き込みます。

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

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

[このトピックの先頭に戻る。](#top)

## 関連項目

[マッチメイキングの概要](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/live-matchmaking-overview.md)


## Related topics

- [マッチメイキングの概念](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/concepts/live-matchmaking-concepts-nav.md)
- [概念](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/concepts/index.md)
- [マッチメイキングの概要](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/live-matchmaking-overview.md)
- [マッチメイキング](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/index.md)
- [SmartMatch マッチメイキング (目次)](https://docs.xbox.com/ja-jp/services/xbox-services/multiplayer/matchmaking/live-matchmaking-nav.md)
