PlayFab Multiplayer SDK は PlayFab ロビー用の API も提供します。* C++ API の詳細については、Lobby SDK クイックスタート を参照してください。* Unity API の詳細については、Unity 向けクイックスタート を参照してください。* Unreal API の詳細については、Unreal 向けクイックスタート を参照してください。
前提条件
PlayFab マッチメイキングを使用するには、PlayFab アカウント が必要です。アカウントの作成方法については、クイックスタート: Game Manager を参照してください。Game Manager でマッチメイキング キューを構成する
ライブラリは、Game Manager で構成されたキューに対してチケットを作成するユーザー同士をマッチします。設定方法の詳細については、マッチメイキング キューの構成 を参照してください。PlayFab Multiplayer SDK をダウンロードしてセットアップする
プラットフォーム向けの C/C++ SDK をダウンロードし、プロバイダーのヘッダーとライブラリ ファイルをビルドに統合します。このクイックスタートは C/C++ SDK の使用に焦点を当てています。Unity および Unreal のインターフェースについては、以下の記事を参照してください: * Unity 向けクイックスタート * Unreal 向けクイックスタート
PlayFab エンティティにログインする
PlayFab Lobby SDK を使用するには、PlayFab のエンティティ キーとエンティティ トークンを使ってクライアントを認証する必要があります。LoginWithCustomId REST API を使用してログインし、PlayFab のエンティティ キーとトークンのペアを取得します。この API は、PlayFab REST SDK を介して C/C++ プロジェクションとしても利用可能です。LoginWithCustomId は PlayFab の機能を素早く試すための方法ですが、出荷時のログイン メカニズムとして意図されたものではありません。ログインのガイダンスについては、ログインの基本とベスト プラクティス を参照してください。
PlayFab Multiplayer SDK を初期化する
以下の基本ステップに従って、PlayFab Multiplayer SDK を初期化します。- PFMultiplayerInitialize を呼び出して SDK を初期化します。
- PFMultiplayerSetEntityToken を呼び出して、ライブラリがプレイヤーに代わって使用するエンティティ キーとトークンを設定します。
マッチメイキング チケットを作成する
PFMultiplayerCreateMatchmakingTicket を使用してマッチメイキング チケットを作成し、マッチの一部となるすべてのローカル ユーザーと、それらのユーザーに関連付けたい属性を指定します。 この関数は PFMatchmakingTicketConfiguration も受け取ります。ここで、チケットがどのキューを対象としているか、チケットのタイムアウト、およびこのチケットにマッチさせたいリモート ユーザーを指定します。1 人のローカル ユーザーでのマッチメイキング
PFMultiplayerCreateMatchmakingTicket の呼び出しで、1 人のローカル ユーザーのマッチメイキングを開始できます。リモート ユーザーのグループとのマッチメイキング
リモート ユーザーとのグループ マッチメイキングを開始するには、1 つのクライアントをリーダーと考えると便利です。リーダーは、configuration パラメーターを通じてグループ内の他のユーザーを指定して、PFMultiplayerCreateMatchmakingTicket を使用してチケットを作成します。チケットが作成されたら、GetTicketId を呼び出してチケット ID を取得します。この ID をネットワーキング メッシュや共有 PlayFab Lobby などの外部メカニズムを介して他の各ユーザーに送り、各クライアントはチケット ID を指定して PFMultiplayerJoinMatchmakingTicketFromId を呼び出してマッチメイキング チケットに参加します。指定されたプレイヤーが参加するのを待っている間、チケット ステータスは PFMatchmakingTicketStatus::WaitingForPlayers となり、すべてのプレイヤーがチケットに参加したら PFMatchmakingTicketStatus::WaitingForMatch に変わります。複数のローカル ユーザーでのマッチメイキング
複数のローカル ユーザーでマッチメイキングする場合、PFMultiplayerCreateMatchmakingTicket または PFMultiplayerJoinMatchmakingTicketFromId 関数に 1 つの PFEntityKey を渡す代わりに、キーのリストを渡す必要があります。同様に、各ユーザーの属性のリストも渡す必要があります。各リストのエントリ位置は互いに対応する必要があります。つまり、属性リストの最初のエントリは、PFEntityKey リストの最初のプレイヤーの属性である必要があります。マッチメイキング チケットのステータスを確認する
チケットの更新を確認するには、PFMultiplayerStartProcessingMatchmakingStateChanges を呼び出して状態変更を受信し、それらの状態変更の処理が終わったら PFMultiplayerFinishProcessingMatchmakingStateChanges を呼び出す必要があります。 SDK は、チケットのステータスが変わるたびに TicketStatusChanged 状態変更を返し、マッチメイキングが完了したときに TicketCompleted 状態変更を返します。マッチメイキング クライアント SDK を使用した例
マッチを取得する
PFMatchmakingStateChangeType::TicketCompleted 状態変更を受信した後、PFMatchmakingTicketGetMatch を呼び出してマッチの詳細を取得します。これらの詳細には、マッチ ID、マッチした状態のユーザー、そのマッチに推奨されるリージョン、およびマッチに関連付けられたロビーの arrangement string が含まれます。 PFMatchmakingMatchDetails 構造体から必要な情報を取得したら、PFMultiplayerDestroyMatchmakingTicket でチケットを破棄する必要があります。マッチメイキング クライアント SDK を使用した例
マッチメイキング チケットをキャンセルする
何らかの理由で、PFMatchmakingTicketConfiguration で設定したタイムアウト前にクライアントがマッチメイキング処理をキャンセルしたい場合、チケット ハンドルを指定して PFMatchmakingTicketCancel を呼び出します。
この API を呼び出しても、チケットがキャンセルされることは保証されません。キャンセルが処理される前にチケットが完了する場合や、ネットワークやサービスのエラーによりキャンセル要求が失敗する場合があります。次に進む前にチケットのキャンセルが完了したことを確認したい場合は、引き続きマッチメイキングの状態変更を処理してチケットの結果を取得できます。それ以外の場合は、即座に PFMultiplayerDestroyMatchmakingTicket を呼び出すことができます。
マッチメイキング クライアント SDK を使用した例
(任意) プレイヤー同士を Lobby に接続する
プレイヤーがマッチした後、それらをロビーに集めることができます。マッチしたチケットの PFMatchmakingMatchDetails には lobbyArrangementString フィールドが含まれており、これを使用してユーザーを同じ Lobby に参加させることができます。 Lobby と Matchmaking を組み合わせて使用する方法の詳細については、Lobby と Matchmaking を組み合わせて使用する を参照してください。 PlayFab ロビーの詳細については、PlayFab Lobby の概要 を参照してください。マッチメイキング クライアント SDK を使用した例
まとめ
このクイックスタートを使用することで、ゲームでマッチメイキング フローを成功させられるようになりました。加えて、以下の点を検討してください。- タイトルがグループ形成をどのように処理するか。
- ユーザーがマッチを待つ間、タイトルに何を表示するか。
- 失敗と再試行の処理方法。
