翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。
Amazon GameLift を Unity プロジェクトに統合する
このトピックでは、 GameLift Unity 用の Amazon C# Server SDKプラグインをセットアップし、ゲームプロジェクトに統合する方法について説明します。
その他のリソース:
前提条件
Unity に Amazon GameLift C# サーバーSDKプラグインを使用するには、次のコンポーネントが必要です。
-
プラグインがサポートする開発環境と Unity Editor バージョン (「Amazon GameLift 開発ツールを取得する」を参照)。Unity バージョンについての情報は、Unity ドキュメントの「Unity のシステム要件
」を参照してください。 -
Unity パッケージの Amazon GameLift サーバーSDKプラグイン。このパッケージには、C# 用のサーバー SDK 5+ が含まれています。このサイトからパッケージをダウンロードできます: Amazon の開始 GameLift
方法。 -
サードパーティーのスコープレジストリ UnityNuGet。このツールは、サードパーティーの を管理しますDLLs。詳細については、UnityNuGet
Github リポジトリを参照してください。
セットアップ UnityNuGet
ゲームプロジェクト用に UnityNuGet をセットアップしていない場合は、次の手順を使用して Unity パッケージマネージャーを使用してツールをインストールします。または、 NuGet CLI を使用して を手動でダウンロードすることもできますDLLs。詳細については、「Unity SDK用 Amazon GameLift C# サーバー」を参照してくださいREADME
。
ゲームプロジェクト UnityNuGet に統合するには
-
Unity Editor でプロジェクトを開いた状態で、メインメニューに移動し、[編集]、[プロジェクト設定] を選択します。オプションから [パッケージマネージャー] セクションを選択し、[スコープ設定レジストリ] グループを開きます。
-
+ ボタンを選択し、 UnityNuGet スコープ付きレジストリに次の値を入力します。
Name: Unity NuGet URL: https://unitynuget-registry.azurewebsites.net Scope(s): org.nuget
Unity 2021 バージョンのユーザー:
を設定したら UnityNuGet、Unity コンソールに
Assembly Version Validation
エラーが表示されていないかを確認します。これらのエラーは、パッケージ内の名前の NuGet強いアセンブリのバインドリダイレクトが Unity プロジェクト内のパスに正しく解決されない場合に発生します。この問題を解決するには、Unity のアセンブリバージョンの検証を設定します。Unity Editor でメインメニューに移動し、[編集]、[プロジェクト設定] を選択し、[プレイヤー] セクションを開きます。
[アセンブリバージョン検証] オプションの選択を解除します。
プラグインをインストールする
Unity 用の Amazon GameLift C# サーバーSDKプラグインをインストールし、log4net ログ記録を設定するには、次の手順に従います。
プラグインをインストールするには
Unity Editor でプロジェクトを開いた状態で、メインメニューに移動し、[ウィンドウ」、[パッケージマネージャー] を選択します。
[+] ボタンを選択して新しいパッケージを追加します。[tarball からパッケージを追加] オプションを選択します。
ディスク のパッケージを選択 で、Unity ダウンロードファイル用の Amazon GameLift C# Server SDK プラグインを見つけ、Amazon GameLift Server SDK
.tgz
ファイルを選択します。[開く] を選択してプラグインをインストールします。
Amazon GameLift サーバーSDKは log4net フレームワークを使用してログメッセージを出力します。デフォルトではサーバービルドのターミナルにメッセージを出力するように設定されていますが、Unity ではファイルロギングのサポートを追加するための設定が必要です。Amazon GameLift Server SDKパッケージ内に提供されたサンプルをインポートすることで、このサポートをプロジェクトに追加できます。以下の手順に従って、サンプルを追加し、log4net を設定します。
log4net をファイル出力用に設定するには
Unity Editor でプロジェクトを開いた状態で、メインメニューに移動し、[ウィンドウ」、[パッケージマネージャー] を選択します。
ドロップダウンメニューから、プロジェクト でパッケージ: を選択し、パッケージのリストから Amazon GameLift Server SDK を選択します。これによりパッケージの詳細が開きます。
パッケージの詳細で、[サンプル] グループオプションを選択し、[インポート] を押します。
log4net.config
ファイルと付属のLoggingConfiguration.cs
スクリプトによって構成が自動的に実行され、プロジェクトのAssets/Samples
フォルダーに設定されました。注記
log4net.config
ファイルをプロジェクト内の別のフォルダーに移動する必要がある場合は、スクリプトLoggingConfiguration.cs
内の config ファイルのファイルパスも新しいパスで更新する必要があります。詳細については、「log4net の設定に関する log4net のマニュアル」を参照してください。
詳細な手順とテストガイダンスについては、プラグインのダウンロードにある「README
」を参照してください。
Amazon のセットアップ GameLift Anywhere テスト用フリート
開発ワークステーションを Amazon としてセットアップできます。 GameLift Anywhere ホストフリートを使用して Amazon GameLift 統合を繰り返しテストします。この設定では、ワークステーションでゲームサーバープロセスを開始し、プレイヤーの参加またはマッチメーキングリクエストを Amazon GameLift に送信してゲームセッションを開始し、クライアントを新しいゲームセッションに接続できます。独自のワークステーションをホスティングサーバーとしてセットアップすると、Amazon とのゲーム統合のすべての側面をモニタリングできます GameLift。
ワークステーションの設定方法については、「Amazon でローカルテストを設定する GameLift Anywhere」を参照して次の手順を完了してください。
ワークステーション用のカスタムロケーションを作成します。
Amazon を作成する GameLift Anywhere 新しいカスタムロケーションを持つフリート。成功すると、このリクエストはフリート ID を返します。この値をメモしておきます。これは後で必要になります。
新しい でワークステーションをコンピューティングとして登録する Anywhere フリート。一意のコンピューティング名を入力し、ワークステーションの IP アドレスを指定します。成功すると、このリクエストはサービスSDKエンドポイントを の形式で返します WebSocket URL。この値をメモしておきます。これは後で必要になります。
ワークステーションコンピューティング用の認証トークンを生成します。この短期間の認証には、トークンと有効期限が含まれます。ゲームサーバーはこれを使用して Amazon GameLift サービスとの通信を認証します。実行中のゲームサーバープロセスがアクセスできるように、認証をワークステーションのコンピューティングに保存します。
Unity プロジェクトに Amazon GameLift サーバーコードを追加する
ゲームサーバーは Amazon GameLift サービスと通信して、指示を受け取り、進行中のステータスを報告します。これを実現するには、Amazon GameLift サーバー を使用するゲームサーバーコードを追加しますSDK。
提供されているコード例は、必要とされる基本的な統合要素を示しています。を使用して、Amazon でのシンプルなゲームサーバーの初期化MonoBehavior
を示します GameLift。この例では、ゲームサーバーが Amazon で実行されていることを前提としています。 GameLift Anywhere テスト用のフリート。これには以下のためのコードが含まれています。
-
Amazon GameLift API クライアントを初期化します。サンプルは、 のバージョン
InitSDK()
と のサーバーパラメータを使用します。Anywhere フリートとコンピューティング。前のトピック で定義したように、 WebSocket URL、フリート ID、コンピューティング名 (ホスト ID)、および認証トークンを使用しますAmazon のセットアップ GameLift Anywhere テスト用フリート。 -
コールバック関数を実装して、、
OnStartGameSession
、OnProcessTerminate
などの Amazon GameLift サービスからのリクエストに対応しますonHealthCheck
。 -
指定されたポートを使用して ProcessReady() を呼び出し、プロセスがゲームセッションをホストする準備ができたら Amazon GameLift サービスに通知します。
このトピックで示すコードは、Amazon GameLift サービスと との通信を確立します。また、からのリクエストに応答する一連のコールバック関数も実装されています。各関数とコードの機能について詳しくは、「サーバープロセスの初期化」を参照してください。このコードで使用されるSDKアクションとデータ型の詳細については、「」を参照してくださいAmazon GameLift サーバー SDK 5.x for C# and Unity: Actions。
このサンプルは、「Amazon を GameLift ゲームサーバーに追加する」で説明されているように、必要なすべての要素 を追加する方法を示しています。これには、以下が含まれます。
Amazon GameLift 機能の追加の詳細については、以下のトピックを参照してください。
using System.Collections.Generic; using Aws.GameLift.Server; using UnityEngine; public class ServerSDKManualTest : MonoBehaviour { //This example is a simple integration that initializes a game server process //that is running on an Amazon GameLift Anywhere fleet. void Start() { //Identify port number (hard coded here for simplicity) the game server is listening on for player connections var listeningPort = 7777; //WebSocketUrl from RegisterHost call var webSocketUrl = "wss://us-west-2.api.amazongamelift.com"; //Unique identifier for this process var processId = "myProcess"; //Unique identifier for your host that this process belongs to var hostId = "myHost"; //Unique identifier for your fleet that this host belongs to var fleetId = "myFleet"; //Authorization token for this host process var authToken = "myAuthToken"; //Server parameters are required for a GameLift Anywhere fleet. //They are not required for a GameLift managed EC2 fleet. ServerParameters serverParameters = new ServerParameters( webSocketUrl, processId, hostId, fleetId, authToken); //InitSDK establishes a local connection with an Amazon GameLift agent //to enable further communication. var initSDKOutcome = GameLiftServerAPI.InitSDK(serverParameters); if (initSDKOutcome.Success) { //Implement callback functions ProcessParameters processParameters = new ProcessParameters( //Implement OnStartGameSession callback (gameSession) => { //GameLift sends a game session activation request to the game server //with game session object containing game properties and other settings. //Here is where a game server takes action based on the game session object. //When the game server is ready to receive incoming player connections, //it invokes the server SDK call ActivateGameSession(). GameLiftServerAPI.ActivateGameSession(); }, (updateGameSession) => { //GameLift sends a request when a game session is updated (such as for //FlexMatch backfill) with an updated game session object. //The game server can examine matchmakerData and handle new incoming players. //updateReason explains the purpose of the update. }, () => { //Implement callback function OnProcessTerminate //GameLift invokes this callback before shutting down the instance hosting this game server. //It gives the game server a chance to save its state, communicate with services, etc., //and initiate shut down. When the game server is ready to shut down, it invokes the //server SDK call ProcessEnding() to tell GameLift it is shutting down. GameLiftServerAPI.ProcessEnding(); }, () => { //Implement callback function OnHealthCheck //GameLift invokes this callback approximately every 60 seconds. //A game server might want to check the health of dependencies, etc. //Then it returns health status true if healthy, false otherwise. //The game server must respond within 60 seconds, or GameLift records 'false'. //In this example, the game server always reports healthy. return true; }, //The game server gets ready to report that it is ready to host game sessions //and that it will listen on port 7777 for incoming player connections. listeningPort, new LogParameters(new List<string>() { //Here, the game server tells GameLift where to find game session log files. //At the end of a game session, GameLift uploads everything in the specified //location and stores it in the cloud for access later. "/local/game/logs/myserver.log" })); //The game server calls ProcessReady() to tell GameLift it's ready to host game sessions. var processReadyOutcome = GameLiftServerAPI.ProcessReady(processParameters); if (processReadyOutcome.Success) { print("ProcessReady success."); } else { print("ProcessReady failure : " + processReadyOutcome.Error.ToString()); } } else { print("InitSDK failure : " + initSDKOutcome.Error.ToString()); } } void OnApplicationQuit() { //Make sure to call GameLiftServerAPI.ProcessEnding() and GameLiftServerAPI.Destroy() before terminating the server process. //These actions notify Amazon GameLift that the process is terminating and frees the API client from memory. GenericOutcome processEndingOutcome = GameLiftServerAPI.ProcessEnding(); GameLiftServerAPI.Destroy(); if (processEndingOutcome.Success) { Environment.Exit(0); } else { Console.WriteLine("ProcessEnding() failed. Error: " + processEndingOutcome.Error.ToString()); Environment.Exit(-1); } } }
追加リソース
以下のリソースを使用してゲームサーバーをテストし、機能を拡張します。
-
開発マシンを Amazon GameLift Anywhere フリートとして設定し、ローカルテストに使用します。「カスタムサーバー統合のテスト」を参照してください。
-
ゲームサーバーを構築し、ビルドを Amazon にアップロードします GameLift。「Amazon へのカスタムサーバービルドのアップロード GameLift」を参照してください。
ゲームサーバービルドを Amazon GameLift マネージドEC2フリートにデプロイします。「新しい Amazon GameLift フリートを作成する」を参照してください。