FlexMatch を使用して既存のゲームをバックフィル - Amazon GameLift

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

FlexMatch を使用して既存のゲームをバックフィル

マッチバックフィルは、既存のマッチ済みのゲームセッションの新しいプレイヤーを見つけるために,FlexMatch メカニズムを使用します。プレイヤーは任意のゲームにいつでも追加できますが [Join a player to a game session](ゲームセッションへのプレイヤーの参加)を参照)、マッチバックフィルにより、新しいプレイヤーが既存のプレイヤーと同じ条件を満たすことができます。また、マッチバックフィルは新しいプレイヤーをチームに割り当て、プレイヤーの受け入れを管理し、更新されたマッチ情報をゲームサーバーに送信します。マッチバックフィルの詳細については「FlexMatch マッチメーキングプロセス」を参照してください。

注記

現在、FlexMatch バックフィルは、Realtimeサーバーを使用しているゲームで使用することはできません。

バックフィルメカニズムには、次の 2 種類があります。

  • 最大許容プレイヤー数よりも少ないプレイヤーで開始したゲームセッションをフィルするには、自動バックフィルを有効にします。

  • 進行中のゲームセッションからドロップアウトしたプレーヤーを置き換えるには、バックフィルリクエストを送信する機能をゲームサーバーに追加します。

自動バックフィルの起動

自動マッチバックフィルでは、フィルされていない単独または複数のプレーヤースロットでゲームセッションが開始されるたびに、Amazon GameLift が自動的にバックフィルリクエストをトリガーします。この機能により、マッチしたプレイヤーの最小数が見つかるとすぐにゲームを開始し、残りのスロットを後で埋めることができるようになります。自動バックフィルはいつでも停止できます。

例として、6 〜 10 人のプレーヤーを保持できるゲームを考えてみましょう。FlexMatch は 最初6 人のプレイヤーを検索し、マッチングを行い、新しいゲームセッションを開始します。自動バックフィルを使用すると、新しいゲームセッションはすぐに 4 人の追加プレーヤーを要求することができます。ゲームの性質によっては、ゲームセッション中にいつでも新しいプレーヤーが参加できるように許可したいかもしれません。または、初期セットアップフェーズとゲームプレイ開始前に自動バックフィルを停止することもできます。

自動バックフィルをゲームに追加するには、ゲームに以下の変更を加えます。

  1. [Enable automatic backfill](自動バックアップを有効にする。) 自動バックフィルはマッチメーキング設定で管理します。有効にすると、そのマッチメーカーで作成されたすべてのマッチされたゲームセッションで使用されます。Amazon GameLift は、ゲームセッションがゲームサーバーで開始され次第、完全ではないゲームセッションへのバックフィルリクエストの生成を開始します。

    自動バックフィルを有効にするには、マッチング設定を開き、バックフィルモードを [自動] に設定します。詳細については、「マッチメーキング設定の作成」を参照してください。

  2. [Turn on backfill prioritization](バックフィル優先設定の起動) マッチメーキングプロセスをカスタマイズして、新しいマッチを作成する前に、バックフィルリクエストのフィリングを優先させます。マッチメーキングルールセットで、アルゴリズムコンポーネントを追加し、バックフィル優先度を「高」に設定します。詳細については、「マッチアルゴリズムのカスタマイズ」を参照してください。

  3. 新しいマッチングデータで既存のゲームセッションを更新します。Amazon GameLift は Server SDK コールバック関数を使用して、マッチング情報でゲームサーバーを更新しますonUpdateGameSession[ Initialize the server process](サーバープロセスを初期化する)を参照してください)。バックフィルアクティビティの結果として更新されたゲームセッションオブジェクトを処理するために、コードをゲームサーバーに追加します。詳細については、「ゲームサーバー上のマッチデータの更新」を参照してください。

  4. ゲームセッションの自動バックフィルを無効にする。個々のゲームセッション中はいつでも自動バックフィルの停止を選択できます。自動バックフィルを停止するには、Amazon GameLift API コール StopMatchmaking を実行するコードをゲームクライアントまたはゲームサーバーに追加します。この呼び出しにはチケット ID が必要です。最新のバックフィルリクエストのバックフィルチケット ID を使用します。この情報は、前のステップで説明されているように、ゲームセッションのマッチメーキングデータから取得できます。

バックフィルリクエストの送信 (ゲームサーバーから)

ゲームセッションをホストするゲームサーバーのプロセスから直接、マッチバックフィルリクエストを開始できます。サーバープロセスは、現在ゲームに接続しているプレイヤーのおよび空のプレイヤースロットのステータスについての最新の情報を持ちます。

このトピックは、既に必要なFlexMatchコンポーネントを構築済みであり、マッチメーキングプロセスをゲームサーバーとクライアント側のゲームサービスに正常に追加済みであることを前提としています。FlexMatch のセットアップの詳細については、「FlexMatch と Amazon GameLift ホスティングの統合」を参照してください。

ゲームのマッチバックフィルを有効にするには、以下の機能を追加する必要があります。

  • マッチメーキングバックフィルリクエストをマッチメーカーに送信し、リクエストのステータスを追跡する。

  • ゲームセッションのマッチ情報を更新する。「ゲームサーバー上のマッチデータの更新」を参照してください。

他のサーバー機能と同様に、ゲームサーバーはAmazon GameLift Server SDK を使用します。この SDK は C++ および C# で使用できます。

ゲームサーバーからマッチバックフィルリクエストを作成するには、次のタスクを完了します。

  1. [Trigger a match backfill request](マッチバックフィルリクエストをトリガーします) 一般的に、マッチされたゲームに 1 つ以上の空きプレイヤースロットがある場合はいつでも、バックフィルリクエストを開始できます。バックフィルリクエストを、重要なキャラクターの役割を埋めるためや、チームのバランスを取るためなどの特定の状況に結びつけることもできます。また、ゲームセッションの継続時間に基づいてバックフィルアクティビティを制限することもできます。

  2. [Create a backfill request](バックフィルリクエストを作成します) マッチバックフィルリクエストを作成して FlexMatch マッチメーカーに送信するためのコードを追加します。バックフィルリクエストは、これらのサーバー API を使用して処理されます。

    バックフィルリクエストを作成するには、次の情報を指定して StartMatchBackfill を呼び出します。バックフィルリクエストをキャンセルするには、バックフィルリクエストのチケット ID を指定して StopMatchBackfill を呼び出します。

    • ][Ticket ID(チケットID)マッチメーキングチケット ID を供給します (または自動生成させることもできます)。同じメカニズムを使用して、マッチメーキングリクエストおよびバックフィルリクエストにもチケット ID を割り当てます。マッチメーキングおよびバックフィルのチケットも同じ方法で処理されます。

    • [Matchmaker](マッチメイカー)バックフィルリクエストに使用するマッチメーカーを特定します。一般的に、元のマッチの作成に使用したものと同じマッチメーカーを使用します。このリクエストはマッチメーキング設定 ARN を取ります。この情報は、ゲームセッションをアクティブ化した際に Amazon GameLift によってサーバープロセスに提供されたゲームセッションオブジェクト (GameSession) に保存されます。マッチメーキング設定 ARN は MatchmakerData プロパティに含まれています。

    • [Game session ARN](Game session ARN)バックフィルされるゲームセッションを特定します。ゲームセッション ARN はサーバー API GetGameSessionId() を呼び出して取得できます。マッチメーキングプロセス中は、新しいリクエストのチケットにはゲームセッション ID がありません。一方、バックフィルリクエストのチケットにはあります。ゲームセッション ID があるかどうかが、新しいマッチのチケットとバックフィルのチケットを見分ける方法の 1 つです。

    • [Player data](プレイヤーデータ)バックフィルするゲームセッション内のすべての現在のプレイヤーのプレイヤー情報 (Player)が含まれています。この情報により、マッチメーカーは現在ゲームセッション内にいるプレイヤーに対して最良のプレイヤーマッチを見つけることができます。各プレーヤーのチームメンバーシップを含める必要があります。バックフィルを使用していない場合は、チームを指定しないでください。ゲームサーバーがプレイヤー接続情報を正確にレポートしているなら、次のようにしてこのデータを取得できます。

      1. ゲームセッションをホストしているサーバープロセスには、現在どのプレイヤーがゲームセッションに接続しているかについての最新情報があります。

      2. プレイヤ ID、属性、およびチームの割り当てを取得するには、ゲームセッションオブジェクト (GameSession(ゲームセッション) の MatchmakerData プロパティからプレイヤーデータを抽出します (「マッチメーカーデータの操作」を参照)。マッチメーカーデータには、ゲームセッションにマッチされたことのあるすべてのプレイヤーが含まれています。そのため、現在接続しているプレイヤーのみのプレイヤーデータをプルする必要があります。

      3. プレイヤーレイテンシーについては、マッチメーカーがレイテンシーデータを呼び出す場合、新しいレイテンシー値をすべての現在のプレイヤーから収集し、それを各 Player オブジェクトに含めます。レイテンシールールが省略されマッチメーカーにレイテンシールールがある場合、リクエストは正常にマッチされません。バックフィルリクエストには、ゲームセッションが現在置かれているリージョンのレイテンシーデータのみが必要です。ゲームセッションのリージョンは GameSession オブジェクトの GameSessionId プロパティから取得できます。この値はリージョンを含む ARN です。

  3. [Track the status of a backfill request](バックフィルリクエストのステータスを追跡する) Amazon GameLift は Server SDK コールバック関数 を使用して、バックフィルリクエストのステータスに関してゲームサーバーを更新しますonUpdateGameSession (「 サーバープロセスを初期化する」を参照)。ステータスメッセージ (およびバックフィルリクエストゲームサーバー上のマッチデータの更新 が成功した結果として更新されたゲーム セッションオブジェクト) を処理するコードを追加します。

    マッチメーカーで処理できるゲームセッションからのマッチバックフィルリクエストは一度に 1 つだけです。リクエストをキャンセルする必要がある場合は、[StopMatchmaking](マッチメーキングの停止) を呼び出します。リクエストを変更する必要がある場合は、StopMatchBackfill を呼び出してから、更新されたリクエストを送信します。

バックフィルリクエストの送信 (クライアントサービスから)

バックフィルリクエストをゲームサーバーから送信する代わりに、クライアント側のゲームサービスから送信できます。このオプションを使用するには、クライアント側のサービスがゲームセッションアクティビティとプレイヤー接続の現在のデータにアクセスできる必要があります。ゲームがセッションディレクトリサービスを使用している場合に適した選択です。

このトピックは、既に必要なFlexMatchコンポーネントを構築済みであり、マッチメーキングプロセスをゲームサーバーとクライアント側のゲームサービスに正常に追加済みであることを前提としています。FlexMatch のセットアップの詳細については、「FlexMatch と Amazon GameLift ホスティングの統合」を参照してください。

ゲームのマッチバックフィルを有効にするには、以下の機能を追加する必要があります。

  • マッチメーキングバックフィルリクエストをマッチメーカーに送信し、リクエストのステータスを追跡する。

  • ゲームセッションのマッチ情報を更新する。ゲームサーバー上のマッチデータの更新を参照してください

他のクライアント機能と同様に、クライアント側のゲームサービスは、AWS SDK と Amazon GameLift API を使用します。この SDK は、C++、C#、およびその他いくつかの言語で使用できます。クライアント API の一般的な説明については、Amazon GameLift サービス API リファレンスを参照してください。このリファレンスには、Amazon GameLift 関連アクションの低レベルサービス API についての説明があり、言語固有のリファレンスガイドへのリンクが含まれています。

クライアント側のゲームサービスを設定してマッチしたゲームをバックフィルするには、次のタスクを完了します。

  1. [Trigger a request for backfilling.](バックフィルのリクエストをトリガーします)。一般的に、マッチされたゲームに 1 つ以上の空きプレイヤースロットがある場合はいつでも、ゲームによってバックフィルリクエストが開始されます。バックフィルリクエストを、重要なキャラクターの役割を埋めるためや、チームのバランスを取るためなどの特定の状況に結びつけることもできます。また、ゲームセッションの継続時間に基づいてバックフィルを制限することもできます。トリガーに使用したものが何であれ、少なくとも次の情報が必要になります。この情報は、ゲームセッション ID を指定して DescribeGameSessions を呼び出すことで、ゲームセッションオブジェクト (GameSession) から取得できます。

    • [Number of currently empty player slots](現在の空のプレーヤースロットの数) この値は、ゲームセッションの最大プレイヤー制限と現在のプレイヤー数から計算できます。現在のプレーヤー数は、ゲームサーバーが Amazon GameLift サービスと通信して、新しいプレイヤーの接続を検証したり、切断されたプレイヤーをレポートするたびに更新されます。

    • [Creation policy](作成ポリシー) この設定は、ゲームセッションで現在新しいプレーヤーを受け入れているかどうかを示します。

    ゲームセッションオブジェクトには他にも、ゲームセッション開始時間、カスタムゲームプロパティ、マッチメーカーデータなどの有用な情報が含まれています。

  2. [Create a backfill request](バックフィルリクエストを作成します) マッチバックフィルリクエストを作成して FlexMatch マッチメーカーに送信するためのコードを追加します。バックフィルリクエストは、これらのクライアント API を使用して処理されます。

    バックフィルリクエストを作成するには、次の情報を指定して StartMatchBackfill を呼び出します。バックフィルリクエストはマッチメーキングリクエスト (「プレイヤーのマッチメーキングのリクエスト」を参照) に似ていますが、既存のゲームセッションも特定します。バックフィルリクエストをキャンセルするには、バックフィルリクエストのチケット ID を指定して StopMatchmaking を呼び出します。

    • ][Ticket ID(チケットID)マッチメーキングチケット ID を供給します (または自動生成させることもできます)。同じメカニズムを使用して、マッチメーキングリクエストおよびバックフィルリクエストにもチケット ID を割り当てます。マッチメーキングおよびバックフィルのチケットも同じ方法で処理されます。

    • [Matchmaker](マッチメイカー)使用するマッチメーキング設定の名前を特定します。一般的に、元のマッチの作成に使用したものと同じマッチメーカーをバックフィルに使用します。この情報は、マッチメーキング設定 ARN の下の、ゲームセッションオブジェクト (GameSession) の、MatchmakerData プロパティにあります。名前の値は「matchmakingconfiguration/」に続く文字列です。(たとえば、ARN 値「value "arn:aws:gamelift:us-west-2:111122223333:matchmakingconfiguration/MM-4v4」であれば、マッチメーキング設定名は「MM-4v4」です。)

    • [Game session ARN](ゲームセッション ARN) バックフィルされるゲ[ームセッションを指定します。ゲームセッションオブジェクトから GameSessionId プロパティを使用すると、この ID は必要な ARN 値を使用します。バックフィルリクエストのマッチメーキングチケット (MatchmakingTicket) には、処理中にゲームセッション ID がありますが、新しいマッチメーキングリクエストはマッチが成立するまでゲームセッション ID を取得しません。ゲームセッション ID があるかどうかが、新しいマッチのチケットとバックフィルのチケットを見分ける方法の 1 つです。

    • [Player data](プレイヤーデータ)バックフィルするゲームセッション内のすべての現在のプレイヤーのプレイヤー情報 (Player)が含まれています。この情報により、マッチメーカーは現在ゲームセッション内にいるプレイヤーに対して最良のプレイヤーマッチを見つけることができます。各プレーヤーのチームメンバーシップを含める必要があります。バックフィルを使用していない場合は、チームを指定しないでください。ゲームサーバーがプレイヤー接続情報を正確にレポートしているなら、次のようにしてこのデータを取得できます。

      1. ゲームセッション ID を指定して (DescribePlayerSessions) を呼び出し、ゲームセッションに現在接続しているすべてのプレイヤーを検出します。各プレーヤーセッションにはプレイヤー ID が含まれます。ステータスフィルタを追加してアクティブなプレーヤーのみを取得できます。

      2. ゲームセッションオブジェクト (GameSession) の MatchmakerData プロパティからプレイヤーデータをプルします (「マッチメーカーデータの操作」を参照)。前のステップで取得したプレイヤー ID を使用して、現在接続されているプレーヤーのみのデータを取得します。プレイヤーが切断された場合マッチメーカーのデータは更新されないため、現在のプレイヤーのみのデータを抽出する必要があります。

      3. プレイヤーレイテンシーについては、マッチメーカーがレイテンシーデータを呼び出す場合、新しいレイテンシー値をすべての現在のプレイヤーから収集し、それを Player オブジェクトに含めます。レイテンシールールが省略されマッチメーカーにレイテンシールールがある場合、リクエストは正常にマッチされません。バックフィルリクエストには、ゲームセッションが現在置かれているリージョンのレイテンシーデータのみが必要です。ゲームセッションのリージョンは GameSession オブジェクトの GameSessionId プロパティから取得できます。この値はリージョンを含む ARN です。

  3. バックフィルリクエストのステータスを追跡します。マッチメーキングチケットのステータス更新をリッスンするコードを追加します。イベント通知 (推奨) またはポーリングを使用して、新しいマッチメーキングリクエストのチケットを追跡するセットアップのメカニズムを使用できます (マッチメーキングイベントの追跡 を参照)。バックフィルリクエストでプレイヤーの承認アクティビティをトリガーする必要はなく、プレイヤー情報はゲームサーバーで更新されますが、チケットのステータスを追跡してリクエストの失敗や再送信を処理する必要はあります。

    マッチメーカーで処理できるゲームセッションからのマッチバックフィルリクエストは一度に 1 つだけです。リクエストをキャンセルする必要がある場合は、StopMatchmaking を呼び出します。リクエストを変更する必要がある場合は、StopMatchmaking を呼び出してから、更新されたリクエストを送信します。

    マッチバックフィルリクエストが成功すると、ゲームサーバーは更新された GameSession オブジェクトを受信し、新しいプレイヤーがゲームセッションに参加するために必要なタスクを処理します。詳細については、「ゲームサーバー上のマッチデータの更新」を参照してください。

ゲームサーバー上のマッチデータの更新

ゲーム内でマッチバックフィルリクエストを開始する方法にかかわらず、 Amazon GameLift がマッチバックフィルリクエストの結果として送信するゲームセッション更新をゲームサーバーで処理できる必要があります。

Amazon GameLift がバックフィルリクエストを(正常であってもそうでなくても)完了すると、コールバック関数onUpdateGameSessionを使用してゲームサーバーを呼び出します。この呼び出しには 3 つの入力パラメータが存在します。マッチバックフィルチケット ID、ステータスメッセージ、およびプレーヤー情報を含む最新のマッチメーキングデータを含む GameSession オブジェクトです。ゲームサーバー統合の一部として、ゲームサーバーに次のコードを追加する必要があります。

  1. onUpdateGameSession 関数を実装します。この関数は次のステータスメッセージ (updateReason) を処理できる必要があります。

    • MATCHMAKING_DATA_UPDATED 新しいプレーヤーが正常にゲームセッションにマッチされました。GameSession オブジェクトには、既存のプレイヤーおよび新しくマッチされたプレイヤーのプレイヤーデータを含む、更新されたマッチメーカーデータが含まれます。

    • BACKFILL_FAILED マッチバックフィル試行が内部エラーのために失敗しました。GameSession オブジェクトは変更されません。

    • BACKFILL_TIMED_OUT マッチメーカーが制限時間内にバックフィルマッチを見つけることができませんでした。GameSession オブジェクトは変更されません。

    • BACKFILL_CANCELLED マッチバックフィルリクエストが、StopMatchmaking(クライアント)または StopMatchBackfill (サーバー)の呼び出しによりキャンセルされました。GameSession オブジェクトは変更されません。

  2. バックフィルマッチが成功するには、更新されたマッチメーカーデータを使用して、新しいプレイヤーがゲームセッションに接続した際にこれを処理します。少なくとも、プレイヤーがゲームを開始するために必要な他のプレイヤーの属性とともに、新しいプレイヤーのチーム割り当てを使用する必要があります。

  3. ゲームサーバーのサーバー SDK アクション [ProcessReady]( プロセスレディ) に対する呼び出しで、 onUpdateGameSession コールバックメソッド名をプロセスパラメータとして追加します。