

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

# Unity 用プラグイン: ゲームをマネージド EC2 フリートにデプロイする
<a name="unity-plug-in-ec2"></a>

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

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

## プロファイルを設定する
<a name="unity-plug-in-ec2-profile"></a>

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

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

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

## Amazon GameLift Servers とゲームを統合します。
<a name="unity-plug-in-ec2-integrate"></a>

このタスクでは、ゲームプロジェクトのクライアントコードとサーバーコードを更新します。
+ ゲームサーバーは、ゲームセッション開始のプロンプトの受信、接続情報の提供、ステータスの報告を行うために、Amazon GameLift Servers サービスと通信できる必要があります。
+ ゲームクライアントは、ゲームセッションの情報、ゲームセッションへの参加または開始情報、ゲームに参加するための接続情報を取得できる必要があります。

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

### サーバーコードを統合する
<a name="unity-plug-in-ec2-integrate-server"></a>

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

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

1. GitHub リポジトリ[ aws/amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) に移動し、パス `Samples~/SampleGame/Assets/Scripts/Server` を開きます。

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

サンプルコードには、Amazon GameLift Servers C\# サーバー SDK (バージョン 5) を使用する、以下の最小限の必須要素が含まれています。
+ Amazon GameLift Servers API クライアントを初期化します。Amazon GameLift Servers Anywhere フリートには、サーバーパラメータを指定した InitSDK() コールが必要です。これらの設定は、プラグインで使用できるように自動的に設定されます。
+ Amazon GameLift Servers サービスからのリクエストに応答するため、`OnStartGameSession`、`OnProcessTerminate`、`onHealthCheck` を含む必須のコールバック関数を実装します。
+ 指定されたポートで `ProcessReady()` を呼び出し、サーバープロセスがゲームセッションをホストする準備が整ったことを Amazon GameLift Servers サービスに通知します。

サンプルサーバーコードをカスタマイズする場合は、以下のリソースを参照してください。
+ [サーバー SDK を使用して、Amazon GameLift Servers をゲームサーバーに追加します。](gamelift-sdk-server-api.md)
+ [C\# サーバー SDK 5.x for Amazon GameLift Servers -- アクション](integration-server-sdk5-csharp-actions.md)

### クライアントコードを統合する
<a name="unity-plug-in-ec2-integrate-client"></a>

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

マネージド EC2 フリートでホスティングするためのプラグインワークフローでは、各デプロイシナリオに以下のコンポーネントを含む事前構築済みのバックエンドサービスが含まれています。
+ ゲームセッションのリクエストとゲームセッション情報の取得に使用される Lambda 関数と DynamoDB テーブルのセット。これらのコンポーネントは API ゲートウェイをプロキシとして使用します。
+ 一意のプレイヤー ID を生成し、プレイヤー接続を認証する Amazon Cognito ユーザープール。

これらのコンポーネントを使用するには、ゲームクライアントがバックエンドサービスにリクエストを送信して以下を実行する機能が必要です。
+  AWS Cognito ユーザープールにプレイヤーユーザーを作成し、認証します。
+ ゲームセッションに参加して、接続情報を受信します。
+ マッチメーキングを使用してゲームに参加します。

以下のリソースをガイドとして使用してください。
+ クライアントを GitHub リポジトリ[ aws/amazon-gamelift-plugin-unity ](https://github.com/aws/amazon-gamelift-plugin-unity)の[ GameLiftCoreApi](https://github.com/aws/amazon-gamelift-plugin-unity/blob/main/Runtime/GameLiftCoreApi.cs) クラスと統合します。このクラスは、プレイヤー認証とゲームセッション情報の取得に関する制御を提供します。
+ サンプルゲーム統合を表示するには、GitHub リポジトリ [aws/amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity)、`Samples~/SampleGame/Assets/Scripts/Client/GameLiftClient.cs` に移動します。
+ [Amazon GameLift Servers ゲームクライアント機能の統合する](gamelift-sdk-client-api.md).

### (Unity 6.3\+ のみ) install.sh スクリプトを統合する
<a name="unity-plug-in-ec2-integrate-install-script"></a>

Linux での Unity 6.3 には glibc 2.35 が必要です。Amazon Linux 2023 には glibc 2.34 が含まれています。ソースからの glibc 2.35 の構築と、glibc 2.35 を使用するように Unity バイナリを設定する処理を行う install.sh スクリプトが用意されています。

1. GitHub リポジトリ[ aws/amazon-gamelift-plugin-unity](https://github.com/aws/amazon-gamelift-plugin-unity) に移動し、パス `ExtraServerResources` を開きます。

1. ファイルを見つけ`install.sh`、サーバービルドを含むフォルダにコピーします。

1.  既存の がある場合は`install.sh`、両方のスクリプトの内容を 1 つの にマージします`install.sh`。

## デプロイシナリオを選択する
<a name="unity-plug-in-ec2-scenarios"></a>

このステップでは、この時点でデプロイしたいゲームホスティングソリューションを選択します。どのシナリオを使用しても、ゲームを複数デプロイすることができます。
+ **単一リージョンフリート:** ゲームサーバーを、アクティブなプロファイルのデフォルト 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 トピック \+ GameSessionQueue イベントを処理する SNS トピック \+ Lambda 関数。

## ゲームパラメータを設定する
<a name="unity-plug-in-ec2-parameters"></a>

このステップでは、アップロード先のゲームについて説明します AWS。
+ **ゲーム名:** ゲームプロジェクトにわかりやすい名前を指定します。この名前はプラグイン内で使用されます。
+ **フリート名:** マネージド EC2 フリートにわかりやすい名前を指定します。Amazon GameLift Servers は AWS コンソールでリソースを一覧表示するときに、この名前を (フリート ID とともに) 使用します。
+ **ビルド名:** サーバービルドにわかりやすい名前を指定します。 AWS はこの名前を使用して、 にアップロードAmazon GameLift Serversされ、デプロイに使用されるサーバービルドのコピーを参照します。
+ **起動パラメータ:** マネージド EC2 フリートインスタンスでサーバー実行可能ファイルを起動するときに実行するオプションの手順を入力します。最大長は 1024 文字です。
+ **ゲームサーバーフォルダ:** サーバービルドがあるローカルフォルダへのパスを指定します。
+ **ゲームサーバーファイル:** サーバー実行可能ファイル名を指定します。

## デプロイシナリオ
<a name="unity-plug-in-ec2-deploy"></a>

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

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

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

## ゲームクライアントを起動する
<a name="unity-plug-in-ec2-launch"></a>

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

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

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

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

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

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

サンプルゲームクライアントを使用している場合、次の特徴があります。
+ プレイヤーログインコンポーネント。Anywhere フリートのゲームサーバーに接続する場合、プレイヤーの検証はありません。任意の値を入力して、ゲームセッションに参加します。
+ ゲーム参加のシンプルな UI。クライアントがゲームに参加しようとすると、クライアントは利用可能なプレイヤースロットがあるアクティブなゲームセッションを自動的に検索します。ゲームセッションが利用できない場合、クライアントは新しいゲームセッションをリクエストします。ゲームセッションが利用可能な場合、クライアントは利用可能なゲームセッションへの参加をリクエストします。複数の同時クライアントでゲームをテストすると、最初のクライアントがゲームセッションを開始し、残りのクライアントは既存のゲームセッションに自動的に参加します。
+ 4 つのプレイヤースロットがあるゲームセッション。最大 4 つのゲームクライアントインスタンスを同時に起動でき、同じゲームセッションに参加できます。