Amazon GameLift Servers ゲームクライアント機能の統合する - Amazon GameLift Servers

Amazon GameLift Servers ゲームクライアント機能の統合する

ゲームセッション情報の取得や新しいゲームセッションの作成など、Amazon GameLift Servers サービスと通信する必要があるソリューションコンポーネントに Amazon GameLift Servers ゲームホスティング機能を統合します。ほとんどの場合、この機能はバックエンドサービスコンポーネントに組み込まれています。次のようなコアタスクの機能を追加します。

  • アクティブなゲームセッションの情報とステータスをリクエストします。

  • 既存のゲームセッションで新しいプレイヤーのスロットを予約します。

  • プレイヤーグループの新しいゲームセッションを作成します。

  • 1 人以上のプレイヤーのマッチメーキングをリクエストします。

  • 既存のゲームセッションの更新データを提供します。

Amazon GameLift Servers SDK を通じてゲームホスティングコンポーネントがどのようにやり取りするかの詳細については、「Amazon GameLift Servers とゲームクライアント/サーバーのやり取り」を参照してください。

Amazon GameLift Servers APIをセットアップします。

Amazon GameLift Servers を使用するプロジェクトに AWS SDK for C++ を追加します。

Amazon GameLift Servers クライアントを初期化するコードを追加し、キー設定を保存します。このコードは、Amazon GameLift Servers に依存するコードの前に実行する必要があります。

  1. クライアントをセットアップします。既定のクライアント設定を使用するか、カスタムクライアント設定オブジェクトを作成します。詳細については、AWS::Client::ClientConfiguration (C++) または AmazonGameLiftConfig (C#) を参照してください。

    クライアント設定は、Amazon GameLift Servers に連絡するときに使用するターゲットリージョンとエンドポイントを指定します。リージョンは、使用するデプロイ済みのリソース (フリート、キュー、マッチメーカー) のセットを識別します。デフォルトのクライアント設定では、米国東部 (バージニア北部) リージョンが指定されます。その他のリージョンを使用するには、カスタム設定を作成します。

  2. Amazon GameLift Servers クライアントを初期化します。Aws::GameLift::GameLiftClient() (C++) または AmazonGameLiftClient() (C#) をデフォルトのクライアント設定またはカスタム設定のいずれかで使用します。

  3. プレイヤーセッションを使用している場合は、各プレイヤーに一意の識別子を生成する仕組みを追加します。詳細については、「プレイヤー ID を生成する」を参照してください。

  4. 以下の情報を収集して保存します。

    • ターゲットフリート – 特定のフリートでゲームセッションを手動で作成する場合は、ターゲットフリートを指すフリート ID またはエイリアス ID を指定します。フリートがマルチロケーションの場合は、フリートロケーションを指定します。ベストプラクティスとして、バックエンドサービスを更新しなくてもプレイヤーをあるフリートから別のフリートに切り替えられるようにフリートエイリアスを使用してください。

    • ターゲットキュー – フリートキューを使用して新しいゲームセッションを配置する場合は、配置リクエストを送信するキュー名を指定します。

    • AWS 認証情報 – Amazon GameLift Servers サービスへのすべての呼び出しは、ゲームをホストする AWS アカウント の認証情報を提供する必要があります。これらの認証情報は、「ゲームへのプログラムによるアクセスをセットアップする」で説明されているようにプレイヤーユーザーを作成して取得します。プレイヤーユーザーのアクセスを管理する方法に応じて、次の操作を行います。

      • ロールを使用してプレイヤーのユーザーアクセス許可を管理する場合は、Amazon GameLift Servers API を呼び出す前にロールを引き受けるコードを追加します。ロールを引き受けるリクエストは、一時的なセキュリティ認証情報のセットが返します。詳細については、「IAM ユーザーガイド」の「IAM ロール への切り替え (AWS API)」を参照してください。

      • 長期的なセキュリティ認証情報がある場合は、保存されている認証情報を検索して使用するようにコードを設定します。「AWS SDK およびツールリファレンスガイド」の「長期認証情報を使用して認証する」を参照してください。認証情報の保存については、(C++) および (.NET) の AWS API リファレンスを参照してください。

      • 一時的なセキュリティ認証情報がある場合は、「IAM ユーザーガイド」の「AWS SDK での一時的なセキュリティ認証情報の使用」で説明されているように、AWS Security Token Service (AWS STS) を使用して認証情報を定期的に更新するコードを追加します。古い認証情報の有効期限が切れる前に、コードから新しい認証情報をリクエストする必要があります。

アクティブなゲームセッションの取得

使用可能なゲームセッションを検出し、ゲームセッション設定とメタデータを管理するコードを追加します。

アクティブなゲームセッションを検索する

SearchGameSessions を使用して、特定のゲームセッション、すべてのアクティブなセッション、または検索条件セットを満たすセッションに関する情報を取得します。この呼び出しは、検索リクエストに一致するアクティブなゲームセッションごとに GameSession オブジェクトを返します。このオブジェクトには、ゲームクライアントがゲームセッションに接続するために必要な DNS 名、IP アドレス、ポート番号が含まれます。

プレイヤーが参加できるアクティブなゲームセッションのフィルタリングされたリストを取得するには、検索条件を使用します。例えば、次のようにセッションをフィルタリングできます。

  • 空きがないゲームセッションを除外する: CurrentPlayerSessionCount = MaximumPlayerSessionCount

  • セッションが実行されている時間の長さに基づいてゲームセッションを選択する: CreationTime を評価する。

  • カスタムゲームプロパティに基づいてゲームセッションを検索する: gameSessionProperties.gameMode = "brawl"

ゲームセッションデータの管理

ゲームのセッション情報を取得または更新するには、次のいずれかのオペレーションを使用します。

  • DescribeGameSessionDetails() – ゲームセッション情報に加えて、ゲームセッションの保護ステータスを取得します。

  • UpdateGameSession – ゲームセッションのメタデータと設定を必要に応じて変更します。

  • GetGameSessionLogUrl – 保存済みゲームセッションログにアクセスします。

ゲームセッションを作成する

デプロイ済みフリートで新しいゲームセッションを起動し、それらのセッションをプレイヤーが使用できるようにするコードを追加します。ゲームセッションを作成するには、ゲームホスティングソリューションがゲームセッションの配置を管理する方法に応じて、2 つのオプションがあります。

マルチフリートキューでゲームセッションを作成する

StartGameSessionPlacement を使用して、新しいゲームセッションのリクエストをキューに配置します。この操作を使用するには、キューを作成します。これにより、Amazon GameLift Servers が新しいゲームセッションを配置する場所が決まります。キューの詳細とそれらの使用方法については、「ゲームセッションの配置を設定する」を参照してください。

ゲームセッションプレイスメントを作成するときは、使用するキューの名前、ゲームセッション名、同時実行プレイヤーの最大数、オプションのゲームプロパティのセットを指定します。また、オプションで、ゲームセッションに自動的に参加するプレイヤーのリストを指定することもできます。関連するリージョンのプレイヤーレイテンシーデータを含めた場合、Amazon GameLift Servers はこの情報を使用して、できる限り最適なゲームプレイエクスペリエンスをプレイヤーに提供するフリートに、新しいゲームセッションを配置します。

正確なレイテンシー測定値を取得するには、Amazon GameLift Servers の UDP ping ビーコンを使用します。これらのエンドポイントを使用すると、プレイヤーデバイスと潜在的なホスティングロケーション間の実際の UDP ネットワークレイテンシーを測定できるため、ICMP ping を使用するよりも正確な配置決定を行うことができます。UDP ping ビーコンを使用してレイテンシーを測定する方法の詳細については、「UDP ping ビーコン」を参照してください。

ゲームセッション配置は非同期プロセスです。リクエスト送信後は、それが成功するかタイムアウトするかです。また、StopGameSessionPlacement を使用してリクエストをいつでもキャンセルすることができます。プレイスメントリクエストのステータスを確認するには、DescribeGameSessionPlacement を呼び出します。

特定のフリートにゲームセッションを作成する

CreateGameSession を使用して、指定したフリートに新しいセッションを作成します。この同期オペレーションは、フリートに新しいゲームセッションをホストするための使用可能なリソースがあるかどうかによって、成功か失敗かが決まります。Amazon GameLift Servers が新しいゲームセッションを作成して GameSession オブジェクトを返したら、そのゲームセッションへプレイヤーの参加させることができます。

このオペレーションを使用するときは、フリート ID またはエイリアス ID、セッション名、そのゲームの同時実行プレイヤーの最大数を指定します。オプションで、一連のゲームプロパティを含めることができます。ゲームプロパティは、キーと値のペアの配列で定義されます。

Amazon GameLift Servers リソース保護機能を使って、1 人のプレイヤーが作成できるゲームセッションの数を制限する場合は、ゲームセッション作成者のプレイヤー ID を指定ます。

ゲームセッションにプレイヤーを参加させる

アクティブなゲームセッションにプレイヤースロットを予約し、ゲームクライアントをゲームセッションに接続するコードを追加します。このアクションは、ゲームが一意のプレイヤー IDs を持つプレイヤーセッションを使用している場合に使用できます。プレイヤーセッションの詳細については、「Amazon GameLift Servers とプレイヤーエクスペリエンス」を参照してください。

  1. ゲームセッションにプレイヤースロットを予約する

    プレイヤースロットを予約するには、ゲームセッションにプレイヤーセッションを作成します。これには、以下の 2 つの方法があります。

    • StartGameSessionPlacement または StartMatchmaking を使用してゲームセッションを作成する場合、リクエストに 1 人以上のプレイヤーを含めて、新しいゲームセッションでプレイヤーセッションを作成できます。

    • 既存のゲームセッションにプレイヤーを追加するには、CreatePlayerSession または CreatePlayerSessions をゲームセッション ID で呼び出します。

    プレイヤーセッションリクエストには、一意のプレイヤー ID を含める必要があります。詳細については、「プレイヤー ID を生成する」を参照してください。リクエストを受信すると、Amazon GameLift Servers はゲームセッションが新規プレイヤーを受け入れており、利用可能なプレイヤースロットがあることを確認します。成功すると、Amazon GameLift Servers はそのプレイヤー用のスロットを確保し、新しいプレイヤーセッションを作成し、PlayerSession オブジェクトを返します。

    プレイヤーセッションには、一連のカスタムプレイヤーデータを含めることができます。このデータは、新しく作成されたプレイヤーセッションオブジェクトに保存されます。Amazon GameLift Servers は、プレイヤーがゲームセッションに直接接続するときに、このオブジェクトをゲームサーバーに渡します。複数のプレイヤーセッションをリクエストする場合は、各プレイヤーデータ文字列をプレイヤー ID に対応付けます。

  2. ゲームセッションに接続する

    バックエンドサービスにコードを追加して PlayerSession オブジェクトを取得し (DescribePlayerSessions() を呼び出すなど)、ゲームクライアントに渡します。このオブジェクトには、DNS 名、IP アドレス、ポートが含まれます。ゲームクライアントは、この情報を使用してサーバーへの直接接続を確立できます。

    • 指定したポートと、サーバープロセスに割り当てられた DNS 名または IP アドレスを使用して接続できます。

    • フリートに対して TLS 証明書の生成が有効になっている場合、DNS 名とポートを使用して接続します。

    • ゲームサーバーが新規プレイヤーの接続を検証する場合は、プレイヤーセッション ID を参照します。

    接続すると、ゲームクライアントとサーバープロセスは Amazon GameLift Servers を関与させずに直接相互に通信します。サーバーは、Amazon GameLift Servers との通信を維持して、プレイヤーの接続ステータス、ヘルスステータスなどを報告します。

    ゲームサーバーが新規プレイヤーの接続を検証する場合、プレイヤーセッション ID がゲームセッション内の予約済みスロットと一致するかを確認し、接続を許可または拒否します。プレイヤーが切断されると、サーバープロセスが接続中断を報告します。

カスタムゲームデータをゲームセッションに渡す

ゲームクライアントは、ゲームセッションにデータを渡すことができます。ゲームセッションを作成するときは、一連のゲームプロパティ (キーと値のペア) またはゲームセッションデータ (文字列値) をリクエストに含めることができます。新規または更新されたゲームデータを使用して、既存のゲームセッションを更新することもできます。このデータは、ゲームサーバーコードで使用するために、ゲームセッションをホストしているゲームサーバープロセスに渡されます。ゲームプロパティは削除できません。

例として、ゲームで難易度レベルを NoviceEasyIntermediateExpert と定義しているとします。プレイヤーは Easy のゲームへの参加を選択します。ゲームクライアントは、バックエンドサービスを通じて、ゲームプロパティ {"Key": "Difficulty", "Value":"Easy"} を使用して新しいゲームセッションをリクエストします。レスポンスとして、Amazon GameLift Servers は利用可能なゲームサーバーに新しいゲームセッションを開始するように促し、GameSession オブジェクトを渡します。ゲームサーバープロセスは、提供されたゲームプロパティを使用してゲームセッションの難易度レベルを設定します。

詳細