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

# Matchmaking quickstart

> Unity で PlayFab マッチメイキング フロー全体を実行するクイックスタート チュートリアル: Multiplayer SDK を使用してチケットを作成し、ステータスをポーリングし、マッチ結果を取得します。

# マッチメイキング REST API クイックスタート

<Note>
  Multiplayer SDK の使用を強く推奨します。リアルタイム メッセージのサポートが含まれており、ポーリングの必要性が低減されます。これによりマッチメイキング体験が改善され、遅延が減少します。[クイックスタート - Client SDK](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk)
</Note>

このクイックスタート ガイドでは、マッチメイキング機能を統合するプロセス全体を説明します。このクイックスタート内のすべてのコード例は Unity 用ですが、コンセプトとフローは (一般的に) 他のプラットフォームにも当てはまります。

ゲームの設計に応じて、[単一ユーザー](#single-user-ticket-matchmaking) と [複数ユーザー](#multiple-user-ticket-matchmaking) のマッチメイキング セクションを検討してください。

このチュートリアルでは、ゲームを見つけるために特定のキューにチケットを送信する方法を示します。キューは通常、1 つのゲーム モードまたは複数のゲーム モードに対応します (例: 同じキュー内での capture the flag モードと king of the hill モード)。

マッチメイキング サービスは、キュー内のチケット間でのマッチの発見を処理します。マッチが見つかったら、タイトルはプレイヤー同士をゲームプレイのために接続する処理を行う必要があります。

## Game Manager でマッチメイキング キューを構成する

このクイックスタートは、Game Manager でキューを構成済みであることを前提としています。設定方法の詳細については、[マッチメイキング キューの構成](/services/playfab/multiplayer/matchmaking/config-queues) を参照してください。

## 単一ユーザーのチケット マッチメイキング

ゲームに 1v1 のゲーム モードがある、または単一ユーザーが 1 人でマッチメイキングに入ることをサポートする場合、単一ユーザー マッチメイキングを検討してください。単一ユーザー マッチメイキングは以下のパターンに従います。

<img src="https://mintcdn.com/microsoft-4404708b/dqv53299jA1M-fNi/images/playfab/multiplayer/matchmaking/quickstart/matchmaking-single-user-flow.png?fit=max&auto=format&n=dqv53299jA1M-fNi&q=85&s=7a34b642c26c3ab073ca258bae379604" alt="マッチメイキング フロー" width="708" height="460" data-path="images/playfab/multiplayer/matchmaking/quickstart/matchmaking-single-user-flow.png" />

### マッチメイキング チケットを作成する

ユーザーは [CreateMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.creatematchmakingticket) を使用してマッチメイキング チケットを作成します。チケット作成が成功すると、サービスは `TicketId` を返します。

チケットの作成では、`Creator` (ユーザーのアイデンティティと属性)、`GiveUpAfterSeconds` (サービスがチケットのマッチングを諦めるまでの秒単位の時間)、およびマッチを検索する `QueueName` を指定する必要があります。

`Creator` フィールドには、`QueueName` と一致するキュー構成が必要とするユーザー属性を含める必要があります。ユーザーが自分自身で諦めるのを防ぐため、`GiveUpAfterSeconds` の時間の適切な値は 120 秒です。

```csharp theme={null}
PlayFabMultiplayerAPI.CreateMatchmakingTicket(
    new CreateMatchmakingTicketRequest
    {
        // The ticket creator specifies their own player attributes.
        Creator = new MatchmakingPlayer
        {
            Entity = new EntityKey
            {
                Id = "<Entity ID goes here>",
                Type = "<Entity type goes here>",
            },

            // Here we specify the creator's attributes.
            Attributes = new MatchmakingPlayerAttributes
            {
                DataObject = new
                {
                    Skill = 24.4
                },
            },
        },

        // Cancel matchmaking if a match is not found after 120 seconds.
        GiveUpAfterSeconds = 120,

        // The name of the queue to submit the ticket into.
        QueueName = "myqueue",
    },

    // Callbacks for handling success and error.
    this.OnMatchmakingTicketCreated,
    this.OnMatchmakingError);
```

### マッチメイキング チケットのステータスを確認する

マッチメイキング内のチケットの `Status` にアクセスするには、`TicketId` によりサービスをポーリングする必要があります。そのために、タイトルから [GetMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatchmakingticket) を呼び出します。1 分間に最大 10 回までポーリングできます。たとえば、6 秒ごとにチケットの状態をポーリングします。ポーリングを行うと、チケットのステータス取得の遅延が増加する可能性があります。このため、[クイックスタート - Client SDK](/services/playfab/multiplayer/matchmaking/quickstart-client-sdk) で説明されている Multiplayer SDK の方法の使用を強く推奨します。これによりリアルタイム メッセージ機能を使用してポーリングの必要性がなくなります。

チケットのステータスが `Matched` に変わると、クライアントはチケットのポーリングを停止できます。その時点から、チケットには `MatchId` が含まれます。

```csharp theme={null}
PlayFabMultiplayerAPI.GetMatchmakingTicket(
    new GetMatchmakingTicketRequest
    {
        TicketId = "<ticket ID goes here>",
        QueueName = "myqueue",
    },
    this.OnGetMatchmakingTicket,
    this.OnMatchmakingError);
```

### マッチを取得する

クライアントから、[GetMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatchmakingticket) の応答で提供された `MatchId` を指定して [GetMatch](xref:titleid.playfabapi.com.multiplayer.matchmaking.getmatch) を呼び出します。このマッチには、一緒にマッチされたユーザーのリストが含まれます。

```csharp theme={null}
PlayFabMultiplayerAPI.GetMatch(
    new GetMatchRequest
    {
        MatchId = "<match ID goes here>",
        QueueName = "myqueue",
    },
    this.OnGetMatch,
    this.OnMatchmakingError);
```

### マッチメイキング チケットをキャンセルする

何らかの理由で、`GiveUpAfterSeconds` に達する前にクライアントがマッチメイキング処理をキャンセルしたい場合は、`TicketId` を指定して [CancelMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.cancelmatchmakingticket) を呼び出します。まだマッチが見つかっていない場合、チケットはマッチメイキング プロセスから外され、そのステータスは `Canceled` に変わります。

```csharp theme={null}
PlayFabMultiplayerAPI.CancelMatchmakingTicket(
    new CancelMatchmakingTicketRequest
    {
        QueueName = "myqueue",
        TicketId = "<ticket ID goes here>",
    },
    this.OnTicketCanceled,
    this.OnMatchmakingError);
```

## 複数ユーザーのチケット マッチメイキング

ゲームで、プレイヤーのグループが一緒にマッチメイキング キューに入ることを許可する場合、マッチメイキングに入るためにさらにいくつかの手順が必要です。不要な呼び出しを避けるため、タイトルではグループ リーダー (作成者) を割り当てることをお勧めします。リーダーがチケットを作成しますが、グループのすべてのメンバーが参加に同意する必要があります。

### マッチメイキング チケットを作成する (複数ユーザー)

タイトルで、グループがチケットの作成者を選出する必要があります。作成者は [CreateMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.creatematchmakingticket) を使用してマッチメイキング チケットを作成し、成功時に `TicketId` を返します。チケットの作成では、`Creator` (ユーザーのアイデンティティと属性)、`GiveUpAfterSeconds` (サービスがチケットのマッチングを諦めるまでの秒単位の時間)、`MembersToMatchWith` (他のグループ メンバーのアイデンティティ)、およびマッチを検索する `QueueName` を指定する必要があります。

`Creator` フィールドには、`QueueName` と一致するキュー構成が必要とするユーザー属性を含める必要があります。ユーザーが自分自身で諦めるのを防ぐため、`GiveUpAfterSeconds` の時間の適切な値は 120 秒です。

### グループ メンバーがマッチ チケットに参加する

マッチ チケットが作成されたら、マッチメイキング プロセスを進めるために、他のグループ メンバーが参加する必要があります。この時点で、チケットは `WaitingForPlayers` ステータスにあります。すべての `MembersToMatchWith` がチケットに参加するまで、他のチケットとのマッチングは開始されません。

メンバーを参加させるには、`Creator` がタイトルを介して他のメンバーに `TicketId` を共有する必要があります。その後、各メンバーは自身に必要な属性を提供して [JoinMatchmakingTicket](xref:titleid.playfabapi.com.multiplayer.matchmaking.joinmatchmakingticket) を呼び出します。すべてのメンバーがチケットに参加すると、チケット ステータスは `WaitingForMatch` になります。

```csharp theme={null}
PlayFabMultiplayerAPI.JoinMatchmakingTicket(
    new JoinMatchmakingTicketRequest
    {
        TicketId = "<ticket ID>",
        QueueName = "myqueue",
        Member = new MatchmakingPlayer
        {
            Entity = new EntityKey
            {
                Id = "<Entity ID goes here>",
                Type = "<Entity type goes here>",
            },
            Attributes = new MatchmakingPlayerAttributes
            {
                DataObject = new
                {
                    Skill = 19.3
                },
            },
        }
    },
    this.OnJoinMatchmakingTicket,
    this.OnMatchmakingError);
```

残りのプロセスは [単一ユーザーのチケット マッチメイキング](#single-user-ticket-matchmaking) と同じです。

### プレイヤー同士を接続する

プレイヤーがマッチした後は、サーバー経由またはピアツーピア接続のいずれかで、プレイヤー同士を接続したくなります。

専用サーバーを使用している場合、マッチ ID を使用して、彼らが属すべきプレイヤーのグループを一意に識別できます。PlayFab のマルチプレイヤー サーバーを使用している場合、`GetMatch` はプレイヤーが接続するサーバーとポートを提供します。

詳細については、[PlayFab Multiplayer Servers との統合](/services/playfab/multiplayer/matchmaking/multiplayer-servers) を参照してください。

このリリース時点では、マッチメイキングによるピアツーピア接続は正式にはサポートされていません。ピアツーピアが必要な場合は、[PlayFab Party](/services/playfab/multiplayer/networking) の使用、または [暫定的な回避策](/services/playfab/multiplayer/matchmaking/peer-to-peer) を検討してください。これについてさらにサポートが必要な場合は、お問い合わせください。

## まとめ

このクイックスタートを使用することで、ゲームでマッチメイキング フローを成功させられるようになりました。加えて、以下の点を検討してください。

* タイトルがグループ形成をどのように処理するか。
* ユーザーがマッチを待つ間、タイトルに何を表示するか。
* 失敗と再試行の処理方法。


## Related topics

- [Matchmaking SDK quickstart](/ja-jp/services/playfab/multiplayer/matchmaking/quickstart-client-sdk.md)
- [PlayFab Online Subsystem (OSS) Quickstart](/ja-jp/services/playfab/multiplayer/networking/party-unreal-engine-oss-quickstart.md)
- [Party Unity plugin quickstart](/ja-jp/services/playfab/multiplayer/networking/party-unity-plugin-quickstart.md)
- [Matchmaking scaling](/ja-jp/services/playfab/multiplayer/matchmaking/matchmaking-partition.md)
- [How matchmaking works](/ja-jp/services/playfab/multiplayer/matchmaking/how-matchmaking-works.md)
