Unity 用プラグイン: ゲームをマネージド EC2 フリートにデプロイする - Amazon GameLift

Unity 用プラグイン: ゲームをマネージド EC2 フリートにデプロイする

このワークフローでは、プラグインを使用して、Amazon GameLift が管理するクラウドベースコンピューティングリソースでホストするようにゲームを準備します。Amazon GameLift 機能用のクライアントとサーバーのゲームコードを追加し、ホストするようにサーバービルドを Amazon GameLift サービスにアップロードします。このワークフローが完了すると、クラウドで実行されるゲームサーバーとゲームサーバーに接続されるゲームクライアントが完成します。

Amazon GameLift マネージド Amazon EC2 ワークフローを開始するには:
  • Unity エディタのメインメニューで、[Amazon GameLift][マネージド EC2 でホスト] の順に選択します。このワークフローに、ゲームコンポーネントを統合、構築、デプロイそして起動する 6 つの手順のプロセスが表示されます。

プロファイルを設定する

このワークフローに従うときに使用したいプロファイルを選択します。選択したプロファイルは、ワークフローのすべてのステップに影響します。作成したすべてのリソースはプロファイルの AWS アカウントに関連付けられ、プロファイルのデフォルトの AWS リージョンに配置されます。プロファイルユーザーのアクセス許可によって、AWS リソースとアクションへのアクセスが決まります。

  1. 使用可能なプロファイルのドロップダウンリストからプロファイルを選択します。プロファイルをまだ作成していない場合、または新しいプロファイルを作成したい場合は、Amazon GameLift メニュー、[AWS アカウントプロファイルの設定] の順に選択します。

  2. ブートストラップステータスが [アクティブ] ではない場合、[ブートストラッププロファイル] を選択して、ステータスが [アクティブ] になるまで待機します。

ゲームサーバーを Amazon GameLift に統合する

このタスクでは、ゲームプロジェクトのクライアントコードとサーバーコードを更新します。

  • ゲームサーバーは、ゲームセッション開始のプロンプトの受信、ゲームセッションの接続情報の提供、ステータスの報告を行うために、Amazon GameLift サービスと通信できる必要があります。

  • ゲームクライアントは、ゲームセッションの情報、ゲームセッションへの参加または開始情報、ゲームに参加するための接続情報を取得できる必要があります。

注記

サンプルゲームをインポートした場合は、この手順をスキップできます。サンプルゲームアセットには、必要なサーバーコードとクライアントコードがすでに設定されています。

サーバーコードを統合する

カスタムシーンで独自のゲームプロジェクトを使用する場合は、提供されたサンプルコードを使用して、必要なサーバーコードをゲームプロジェクトに追加します。テスト用のゲームプロジェクトを Anywhere フリートと統合した場合、このステップの手順はすでに完了しています。

  1. ゲームプロジェクトファイルで、Assets/Scripts/Server フォルダを開きます。存在しない場合は、作成します。

  2. GitHub リポジトリ aws/amazon-gamelift-plugin-unity に移動し、パス Samples~/SampleGame/Assets/Scripts/Server を開きます。

  3. GameLiftServer.cs ファイルを見つけて、ゲームプロジェクトの Server フォルダにコピーします。サーバー実行可能ファイルを構築するときは、このファイルをビルドターゲットとして使用します。

サンプルコードには、Amazon GameLift C# サーバー SDK (バージョン 5) を使用するの以下の最小限の必須要素が含まれています。

  • Amazon GameLift API クライアントを初期化します。Amazon GameLift Anywhere フリートには、サーバーパラメータを使用する InitSDK() 呼び出しが必要です。これらの設定は、プラグインで使用できるように自動的に設定されます。

  • OnStartGameSessionOnProcessTerminateonHealthCheck など、Amazon GameLift サービスからのリクエストに応答する必須のコールバック関数を実装します。

  • 指定されたポートで ProcessReady() を呼び出し、サーバープロセスでゲームセッションをホストする準備ができたら、Amazon GameLift サービスに通知します。

サンプルサーバーコードをカスタマイズする場合は、以下のリソースを参照してください。

クライアントコードを統合する

クラウドベースのゲームサーバーに接続するゲームクライアントの場合、ゲームクライアントから直接呼び出すのではなく、クライアント側のバックエンドサービスを使用して Amazon GameLift サービスを呼び出すことがベストプラクティスです。

マネージド EC2 フリートでホストするためのプラグインワークフローでは、各デプロイシナリオに以下のコンポーネントを含む事前構築済みのバックエンドサービスが含まれています。

  • ゲームセッションのリクエストとゲームセッション情報の取得に使用される Lambda 関数と DynamoDB テーブルのセット。これらのコンポーネントは API ゲートウェイをプロキシとして使用します。

  • 一意のプレイヤー ID を生成し、プレイヤー接続を認証する Amazon Cognito ユーザープール。

これらのコンポーネントを使用するには、ゲームクライアントがバックエンドサービスにリクエストを送信して以下を実行する機能が必要です。

  • AWS Cognito ユーザープールでプレイヤーユーザーを作成し、認証します。

  • ゲームセッションに参加して、接続情報を受信します。

  • マッチメーキングを使用してゲームに参加します。

以下のリソースをガイドとして使用してください。

デプロイシナリオを選択する

このステップでは、この時点でデプロイしたいゲームホスティングソリューションを選択します。どのシナリオを使用しても、ゲームを複数デプロイすることができます。

  • 単一リージョンフリート: アクティブプロファイルのデフォルトの AWS リージョンにあるホスティングリソースの単一フリートにゲームサーバーをデプロイします。このシナリオは、AWS とのサーバー統合とサーバービルド設定をテストする出発点に適しています。次のリソースをデプロイします。

    • ゲームサーバービルドをインストールして実行中の AWS フリート (オンデマンド)。

    • プレイヤーが認証してゲームを開始するための Amazon Cognito ユーザープールとクライアント。

    • ユーザープールと API をリンクする API ゲートウェイオーソライザー。

    • プレイヤーから API ゲートウェイへの過剰な呼び出しを スロットリングする WebACL。

    • プレイヤーがゲームスロットをリクエストするための API ゲートウェイ + Lambda 関数。この関数は、何も利用できない場合に CreateGameSession() を呼び出します。

    • プレイヤーがゲームリクエストの接続情報を取得するための API ゲートウェイ + Lambda 関数。

  • FlexMatch フリート: ゲームサーバーを一連のフリートにデプロイし、プレイヤー対戦を作成するためのルールを含む FlexMatch マッチメーカーをセットアップします。このシナリオでは、マルチフリート、マルチロケーション構造で低コストのスポットホスティングを使用して、耐久性のある可用性をを実現します。このアプローチは、ホスティングソリューション向けのマッチメーカーコンポーネントの設計をすでに開始している場合に役立ちます。このシナリオでは、このソリューションための基本リソースを作成し、必要に応じて後でカスタマイズできます。次のリソースをデプロイします。

    • FlexMatch のマッチメーキング設定とプレイヤーのリクエストとフォームマッチを受け入れるためのマッチメーキングルールセット

    • ゲームサーバービルドがインストールされ、複数のロケーションで稼働している 3 AWS つのフリート。バックアップとして 2 つのスポットフリートと 1 つのオンデマンドフリートが含まれます。

    • (実行可能性、コスト、プレイヤーレイテンシーなどに基づいて) 最適なホスティングリソースを見つけ、ゲームセッションを開始することで、提案されたマッチのリクエストに応える AWS ゲームセッションプレイスメントキュー。

    • プレイヤーが認証してゲームを開始するための Amazon Cognito ユーザープールとクライアント。

    • ユーザープールと API をリンクする API ゲートウェイオーソライザー。

    • プレイヤーから API ゲートウェイへの過剰な呼び出しを スロットリングする WebACL。

    • プレイヤーがゲームスロットをリクエストするための API ゲートウェイ + Lambda 関数。この関数は StartMatchmaking() を呼び出します。

    • プレイヤーがゲームリクエストの接続情報を取得するための API ゲートウェイ + Lambda 関数。

    • Amazon DynamoDB テーブルには、プレイヤーのマッチメーキングチケットとゲームセッション情報を保存できます。

    • SNS トピック + ゲームセッションキューイベントを処理する SNS トピック + Lambda 関数。

ゲームパラメータを設定する

このステップでは、AWS にアップロードするゲームを記述します。

  • ゲーム名: ゲームプロジェクトにわかりやすい名前を指定します。この名前はプラグイン内で使用されます。

  • フリート名: マネージド EC2 フリートにわかりやすい名前を指定します。Amazon GameLift は、AWS コンソールでリソースを一覧する際に、この名前を (フリート ID と一緒に) 使用します。

  • ビルド名: サーバービルドに分かりやすい名前を指定します。AWS は、この名前を使用して、Amazon GameLift にアップロードされ、デプロイに使用されるサーバービルドのコピーを参照します。

  • 起動パラメータ: マネージド EC2 フリートインスタンスでサーバー実行可能ファイルを起動するときに実行するオプションの手順を入力します。最大長は 1024 文字です。

  • ゲームサーバーフォルダ: サーバービルドがあるローカルフォルダへのパスを指定します。

  • ゲームサーバーファイル: サーバー実行可能ファイル名を指定します。

デプロイシナリオ

このステップでは、選択したデプロイシナリオに基づいてゲームをクラウドホスティングソリューションにデプロイします。このプロセスは、AWS がサーバービルドを検証し、ホスティングリソースをプロビジョニングし、ゲームサーバーをインストールし、サーバープロセスを起動し、ゲームセッションをホストする準備が整うまで数分かかる場合があります。

デプロイを開始するには、[CloudFormation をデプロイ] を選択します。ゲームホスティングの状況は、こちらで追跡できます。より詳細な情報については、AWS の AWS 管理コンソールにサインインしてイベント通知を確認することができます。必ず、プラグインのアクティブユーザープロファイルと同じアカウント、ユーザー、AWS リージョンを使用してサインインしてください。

デプロイが完了すると、AWS EC2 インスタンスにゲームサーバーがインストールされています。少なくとも 1 つのサーバープロセスが実行中で、ゲームセッションを開始する準備ができています。

ゲームクライアントを起動する

フリートが正常にデプロイされると、ゲームサーバーが実行され、ゲームセッションをホストできるようになります。クライアントをビルドして起動し、ゲームセッションに接続して参加します。

  1. ゲームクライアントの設定を行います。このステップでは、プラグインにプロンプトして、ゲームプロジェクトの GameLiftClientSettings アセットを更新します。プラグインは、このアセットを使用して、ゲームクライアントが Amazon GameLift サービスに接続するために必要な特定の情報を保存します。

    1. サンプルゲームをインポートして初期化しなかった場合は、新しい GameLiftClientSettings アセットを作成します。Unity エディタのメインメニューで、[アセット]、[作成]、[GameLift]、[クライアント設定] の順に選択します。プロジェクトで GameLiftClientSettings の複数のコピーを作成すると、プラグインはこれを自動検出し、プラグインが更新するアセットについて通知します。

    2. [ゲームを起動] で、[クライアントの設定: マネージド EC2 設定を適用] を選択します。このアクションは、先ほどデプロイしたマネージド EC2 フリートを使用するようにゲームクライアント設定を更新します。

  2. ゲームクライアントをビルドします。標準の Unity ビルドプロセスを使用してクライアント実行可能ファイルを構築します。[ファイル]、[ビルド設定] の順に選択し、プラットフォームを Windows、Mac、Linux に切り替えます。サンプルゲームをインポートして設定を初期化すると、ビルドリストとビルドターゲットが自動更新されます。

  3. 新しく構築されたゲームクライアント実行可能ファイルを起動します。ゲームのプレイを開始するには、2~4 つのクライアントインスタンスを開始し、各インスタンスの UI を使用して、ゲームセッションに参加します。

サンプルゲームクライアントを使用している場合、次の特徴があります。

  • プレイヤーログインコンポーネント。Anywhere フリートのゲームサーバーに接続する場合、プレイヤーの検証はありません。任意の値を入力して、ゲームセッションに参加します。

  • ゲーム参加のシンプルな UI。クライアントがゲームに参加しようとすると、クライアントは利用可能なプレイヤースロットがあるアクティブなゲームセッションを自動的に検索します。ゲームセッションが利用できない場合、クライアントは新しいゲームセッションをリクエストします。ゲームセッションが利用可能な場合、クライアントは利用可能なゲームセッションへの参加をリクエストします。複数の同時クライアントでゲームをテストすると、最初のクライアントがゲームセッションを開始し、残りのクライアントは既存のゲームセッションに自動的に参加します。

  • 4 つのプレイヤースロットがあるゲームセッション。最大 4 つのゲームクライアントインスタンスを同時に起動でき、同じゲームセッションに参加できます。