> ## 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.

# Lobby と Matchmaking を組み合わせて使用する

> アレンジ済みロビーを含め、PlayFab Lobby と Matchmaking を組み合わせて、プレイヤーをグループ化しゲーム セッションを調整するマルチプレイヤー シナリオを構築する方法を学びます。

マルチプレイヤー ゲームを設計する際、マッチメイキングとロビーは、一緒にプレイするグループを形成する目的でよく組み合わせて使用されます。

PlayFab Lobby と PlayFab Matchmaking は、幅広いマルチプレイヤー シナリオの実装に役立ちます。

この記事では、これら 2 つのサービスの関係を説明し、次の [ゲーム シナリオ](#example-scenario) を実装するためにそれらをどのように組み合わせて使用できるかを示します。

## Lobby と Matchmaking の関係を理解する

Lobby と Matchmaking はシームレスに連携し、タイトル向けに一貫性のあるマルチプレイヤー マッチメイキング体験を作り出します。

* Matchmaking はゲーム セッションへの参加を希望する一連のプレイヤーを集めます。
* マッチメイキングでプレイヤーのセットが特定された後、Lobby はゲーム セッションへの参加を調整するためのコミュニケーション手段を提供します。
  * ロビーの一般的なシナリオには、ゲーム サーバー接続情報の共有、ピアツーピア ゲーム用のクライアント IP の共有、プレイヤー構成の共有などがあります。

### アレンジ済みロビー

タイトルは「アレンジ済みロビー」を利用して、マッチメイキングによってグループ化されたプレイヤー向けのロビーを簡単に作成できます。

マッチメイキング チケットがプレイヤーのグループにマッチすると、そのマッチメイキング チケットには **lobbyArrangementString** が含まれます。その後、各プレイヤーは **PFMultiplayerJoinArrangedLobby** にアレンジメント文字列を渡して同じロビーに参加できます。

## サンプル シナリオ

プレイヤーは他の人と一緒にプレイしたいと考えています。プレイヤーはマルチプレイヤー ゲームを開始し、フレンドを招待し、他のプレイヤーの参加を待ちます。

### 設計仕様

* ゲームは誰でも参加可能な状態で開かれています。
* 最初のプレイヤー セットはマッチメイキングを通じて集められます。
* ロビーのオーナーはフレンドを招待して参加させられます。
* 必要な人数のプレイヤーが集まると、ロビー内のすべてのプレイヤーにゲーム開始の準備が整ったか尋ねるメッセージが送られます。応答時間は 1 分です。全プレイヤーがゲーム開始準備完了を確認するとゲームが開始されます。
* ロビー内のプレイヤーがプレイ可能ステータスを確認しなかった場合、ロビーのオーナーはそれらを非アクティブなプレイヤーとして削除し、マッチメイキングを使って新しいプレイヤーを迅速に補充できます。
* ゲーム中にプレイヤーが予期せず切断された場合、タイトルはサーバー バックフィルを使うマッチメイキングを通じて、切断したプレイヤーの新しい代替を見つける必要があります。
* ゲームが終了すると、すべてのプレイヤーはロビーに戻ります。プレイヤーにはチーム アチーブメントが均等に授与されます。ロビーに残って別のゲームを一緒に開始することも、退出することもできます。

### 実装

このセクションでは、Matchmaking と Lobby を使用して [設計仕様](#design-specifications) を実装する方法を説明します。

* [マッチメイキングによるロビーを作成する](#create-a-match-made-lobby)
* [フレンドに招待を送信する](#send-invites-to-friends)
* [プレイヤーがゲームを見つけて参加できるようにする](#allow-people-to-find-and-join-game)
* [ゲーム開始のプレイヤー確認を取得する](#get-player-confirmation-to-start-game)
* [非アクティブなプレイヤーを削除して置き換える](#remove-and-replace-inactive-players)
* [終了したゲームを処理する](#handle-a-finished-game)

### マッチメイキングによるロビーを作成する

マッチメイキングされたプレイヤーのグループのために公開ロビーを作成します。

* 各プレイヤーは、指定したマッチメイキング属性でマッチメイキング チケットを作成します。
  * 詳細については、[チケット属性の指定](/services/playfab/multiplayer/matchmaking/ticket-attributes) を参照してください。
* 作成されたすべてのチケットは、マッチメイキング キューに追加されて相互にマッチされます。
  * チケットはルールに基づいてマッチされます。
  * ルールはマッチメイキング キューの構成で定義できます。
  * 詳細については、[マッチメイキング キューの構成](/services/playfab/multiplayer/matchmaking/config-queues) を参照してください。
* マッチメイキング後、各プレイヤーはマッチメイキング チケットの **lobbyArrangementString** を介してマッチ済みロビーに参加します。
  * アレンジ済みロビーに参加する際は、ロビーの **accessPolicy** に **Public** を指定して、ロビーを開放します。
  * 詳細については、[アレンジ済みロビー](#arranged-lobbies) を参照してください。
* アレンジ済みロビーに最初に参加したプレイヤーがロビーのオーナーになります。
* ロビー プロパティを使用して、ゲーム セッションで使用するゲーム マップを指定できます。
  * 詳細については、[ロビーのプロパティ](/services/playfab/multiplayer/lobby/lobby-properties) を参照してください。
* 検索プロパティを使用して、タイトル内のすべてのアクティブなロビーの中からこのロビーとゲーム セッションをプレイヤーが見つけられるようにします。
  * 詳細については、[検索プロパティ](/services/playfab/multiplayer/lobby/define-search-keywords) を参照してください。

### フレンドに招待を送信する

ロビー オーナーがフレンドを選択して招待を送信できるようにします。

* ロビー オーナーのフレンド リストを取得します。
* ロビー オーナーが招待するフレンドを選択できるようにゲーム UI を表示します。
* 選択したフレンドにゲーム内招待を送信します。
  * 詳細については、[ロビーの招待](/services/playfab/multiplayer/lobby/lobby-invites) を参照してください。

### プレイヤーがゲームを見つけて参加できるようにする

他のプレイヤーがロビーを見つけられるように、ロビーの検索プロパティを設定します。

* ゲーム UI にすべてのロビーを表示します。タイトルは、プレイヤーの検索条件を受け付ける手段も提供する必要があります。
* プレイヤーの検索パラメーターを使用して **PFMultiplayerFindLobbies** を実行し、条件に一致するロビーのリストを返します。
* プレイヤーがゲームに参加することを選択した後、**PFMultiplayerJoinLobby** を使ってプレイヤーをゲームに追加します。

### ゲーム開始のプレイヤー確認を取得する

ゲーム開始の準備が整ったことをロビー内のすべてのプレイヤーに通知します。

* 必要な人数のプレイヤーがロビーに集まったら、プレイ開始の準備ができたことをプレイヤーが確認できるゲーム UI を表示します。
* ロビー オーナーがこれらの確認応答を確認できるようにします。

### 非アクティブなプレイヤーを削除して置き換える

ロビー オーナーは、非アクティブまたは切断されたプレイヤーを削除し、残りの席を埋めるためにマッチメイキングを開始できます。

* プレイヤーが切断された場合や指定された時間 (1 分) 内に応答しなかった場合、**PFLobbyForceRemoveMember** を使ってプレイヤーを削除します。
* ロビー オーナーは **CreateServerBackfillTicket** を使ってマッチメイキング チケットを作成します。この API で作成されたチケットは検索時に優先されます。このアプローチにより、ゲームプレイの中断を最小限に抑えます。詳細については、[サーバー バックフィル チケットの使用](/services/playfab/multiplayer/matchmaking/backfill-tickets) を参照してください。
* バックフィル ロビーに参加した後、ゲームのロビー オーナーは元のロビーの接続文字列を新しいバックフィル プレイヤーと共有し、彼らが元のロビーに参加できるようにします。
* 適切な場合はゲーム開始時間を延長します。

### 終了したゲームを処理する

ゲーム終了後、すべてのプレイヤーはロビー画面に戻ってゲーム セッションを完了します。

* ロビーは一時的なものなので、この時点で永続化すべきロビーのデータは各プレイヤーが保持する必要があります。
  * たとえば、一部のゲーム シナリオでは、メンバー プロパティに格納されたデータを処理してプレイヤーのアチーブメントに変換すると有益な場合があります。
* 同じグループでプレイを続けたいプレイヤーはロビーに残ります。
* 同じグループでのプレイを終了したいプレイヤーは **PFLobbyLeave** でロビーを退出し、新しいマッチメイキング グループでプロセスを再開します。

## 関連項目

* [ロビーの作成](/services/playfab/multiplayer/lobby/create-a-lobby)
* [ロビーの招待](/services/playfab/multiplayer/lobby/lobby-invites)
* [検索プロパティ](/services/playfab/multiplayer/lobby/define-search-keywords)
* [ロビーのプロパティ](/services/playfab/multiplayer/lobby/lobby-properties)
* [Matchmaking でサーバー バックフィル チケットを使用する](/services/playfab/multiplayer/matchmaking/backfill-tickets)


## Related topics

- [Matchmaking SDK quickstart](/ja-jp/services/playfab/multiplayer/matchmaking/quickstart-client-sdk.md)
- [既存の入力コードを GameInput に移植する](/ja-jp/build/core-features/common/input/porting/index.md)
- [D3D12_CLEAR_FLAGS](/ja-jp/reference/graphics/d3d12/enums/d3d12_clear_flags_public.md)
- [コンソール向け GDK で Clang/LLVM を使用する](/ja-jp/tools/tools-console/visualstudio/vs-clang.md)
- [PFEntityKey - PlayFab Multiplayer SDK](/ja-jp/services/playfab/multiplayer/lobby/playfabmultiplayerreference-cpp/pfmultiplayer/pfentitykey_clientsdk.md)
