Amazon Web Services ブログ

発表: Amazon GameLift がすべての C++ と C# ゲームエンジンをサポート

すべてのゲーム開発者の方にお知らせします。数週間前にサンフランシスコで行われた GDC 2017 は大人気でした。そのため、クールなゲームの学習と構築に刺激を受け、情熱を注ぐには今が最適なタイミングです。ここで、Amazon GameLift がすべての C++ と C# ゲームエンジンで利用可能になったことをお知らせします。これには、Amazon Lumberyard、Unreal Engine、Unity が含まれ、そのすべてでゲームセッションのマッチング機能が向上しています。Amazon GameLift に詳しくないお客様向けに、ゲーム開発者が楽しく革新的なオンラインゲーム体験を提供できるよう支援するために設計された、このマネージド型サービスについてご紹介します。

Amazon GameLift は、専用ゲームサーバーをホストするためのマネージド型の AWS のサービスで、ゲーム開発者が簡単にゲームのキャパシティーをスケールし、利用可能なゲームセッションでプレイヤーをマッチングできるようにします。Amazon GameLift を使用すると、サーバーのホスト、ゲームの可用性の追跡、分散サービス拒否 (DDoS) 攻撃からのゲームサーバーの防御が可能なほか、ゲームをオフラインにすることなくアップデートをデプロイできます。Amazon GameLift サービスは Amazon Game Studios の専用ゲームサーバーや外部のゲーム開発顧客に役立ち、指定された時間内に開始、終了するゲームループで、セッションベースのゲームをサポートするよう設計されています。最新の Amazon GameLift リリースではサービスの最新機能が強化されているほか、開発者向けにゲームの開発とデプロイの簡略化を支援する優れた新機能が追加されています。Amazon GameLift サービスのクールな機能のいくつかについて見てみましょう。

  • 複数エンジンのサポート: 当初、Amazon GameLift サービスは Amazon Lumberyard ゲームエンジンのみで使用できました。現在、このサービスは強化され、Unreal EngineUnity のような一般的なゲームエンジンをはじめ、カスタム C# と C++ ゲームエンジンと統合されます。
  • 新しいサーバー SDK 言語のサポート: より多くのお客様と開発者をサポートするため、このサービスでは C# と C++ で利用できる Amazon GameLift Server SDK が提供されます。これには、Amazon GameLift 用の Unreal Engine API と互換性のある、カスタマイズされたバージョンの C++ Server SDK である Unreal Engine プラグインが含まれています。
  • クライアント SDK 言語サポートの拡張: Amazon GameLift Client SDK は 多数の言語で提供されている AWS SDK にバンドルされました。これにより、ゲーム開発者は選択した言語で Amazon GameLift サービスが統合されたゲームクライアントを構築できます。
  • マッチメーキング: Amazon GameLift は世界中の利用可能なゲームサーバーを継続的にスキャンし、プレイヤーのリクエストにマッチングしてゲームに参加させます。低レイテンシーのゲームサーバーが利用できない場合は、プレイヤーの周囲にキャパシティーを自動的に追加するようサービスを設定できます。Amazon GameLift は新しいゲームが開始されるか新しいインスタンスが起動するまで待機中のプレイヤーのキューを維持してから、待機中のプレイヤーを最もレイテンシーが低いゲームに配置します。
  • プレイヤーデータの処理: ゲーム開発者はカスタムプレイヤー情報を保存し、ゲームサーバーに直接渡せるようになりました。これにより、ゲームサーバーまたは API を持つその他のゲームエンティティは、Amazon GameLift からプレイヤーデータを取得できます。
  • コンソールのサポート: Amazon GameLift は、XBox One および PS4 用に開発、作成されたゲームをサポートします。

Amazon GameLift はセッションベースのマルチプレイヤーゲームの作成に必要であった手間のかかるタスクを、ゼロからのインフラストラクチャの構築に関連する時間、コスト、リスクを減らしつつ、ゲームサーバーのデプロイ、スケーリング、維持のプロセスを簡略化することで実行します。Amazon GameLift を利用するゲームソリューションのリファレンスアーキテクチャを次に示します。

 

ゲームへの Amazon GameLift の統合
ゲームビルドへの Amazon GameLift の統合はいくつかの簡単なステップに分割できます。

  1. Amazon GameLift Server SDK を使用してゲームサーバープロジェクトを設定し、プロジェクトに通信コードを追加して、ゲームサーバーで Amazon GameLift のホスティングを準備します。
  2. ゲームデプロイの対象とした AWS リージョンに対してゲームサーバービルドをパッケージ化し、アップロードします。
  3. ゲームをホストするための複数のコンピューティングリソースを作成、構築します。
  4. AWS SDK と Amazon GameLift API を使用して Amazon GameLift によって維持されるゲームセッションに接続するようゲームクライアントを準備し、Amazon GameLift サービスへの呼び出しのゲームクライアント用のコードを追加して、プレイヤーのリージョンを識別します。
  5. Amazon GameLift でホストされたゲームセッションに接続し、ゲームセッションを作成中であることを確認して、Amazon GameLift の統合をテストします。

Unreal ゲームエンジンを使用して簡単なゲームサーバープロジェクトで Amazon GameLift Server SDK をセットアップして、これらのステップの実行を開始しましょう。Unreal Engine (UE) Epic の Unreal ゲームエンジンから開始します。分かりやすいように、オンラインマルチプレイヤー機能が組み込まれたサンプルの Shooter Game プロジェクトを作成し、コンピュータにローカルに保存します。

マルチプレイヤー Shooter Game のサンプルをダウンロードし、マシンでローカルに開いたので、C++ コードを操作して、Amazon GameLift サービスを UE オンラインサブシステムに追加し、オンラインゲームセッションを管理する必要があります。Shooter Game サンプルは Unreal Engine の Blueprints Visual Scripting システムを利用します。Blueprints システムは UE エディタのノードベースのインターフェイスに基づくゲームプレイスクリプティングシステムです。これにより、ゲーム設計者とコンテンツ作成者は UE エディタ内でゲームプレイ要素と機能を作成できます。私の目標は Amazon GameLift C++ SDK を使用して Amazon GameLift サービスをゲームに含め、ゲームコードを変更することなので、ゲームと結び付ける Visual Studio プロジェクトソリューションを作成し、Shooter Game のソースコードとバイナリをプロジェクトに関連付ける必要があります。これを達成するため、コンテキストメニューに移動して、[File] メニューオプションを選択します。メニューのドロップダウンで、[Generate Visual Studio Project Files] オプションを見つけて選択します。

プロジェクトが生成されたら、コンテキストメニューに戻って [File] を選択し、プロジェクトを開いてソースコードを表示するために [Open with Visual Studio] を選択します。

Amazon Game Lift サービスをゲームサービスとして Shooter Game に追加する準備として、またゲームセッションの管理のため、プロジェクトで OnlineSubSystem モジュールを有効にする必要があります。これを行うには、Visual Studio プロジェクトでゲームビルド設定ファイルを開きます。このゲームプロジェクトの名前は ShooterGame であるため、ビルドファイルの名前は ShooterGame.Build.cs になり、次に示すように Source/ShooterGame フォルダにあります。

ビルドファイルを開き、OnlineSubsystemNull モジュールの行のコメントを解除します。既にマルチプレイヤーオンラインシステムを利用しているサンプルを使用しているため、ビルドオプションは適切に設定され、コードは次のようになります。

public class ShooterGame : ModuleRules
{
	public ShooterGame(TargetInfo Target)
	{
		PrivateIncludePaths.AddRange(
			new string[] { 
				"ShooterGame/Classes/Player",
				"ShooterGame/Private",
				"ShooterGame/Private/UI",
				"ShooterGame/Private/UI/Menu",
				"ShooterGame/Private/UI/Style",
				"ShooterGame/Private/UI/Widgets",
            		}
		);
       PublicDependencyModuleNames.AddRange(
			new string[] {
				"Core",
				"CoreUObject",
				"Engine",
				"OnlineSubsystem",
				"OnlineSubsystemUtils",
				"AssetRegistry",
             			"AIModule",
				"GameplayTasks",
			}
		);
       PrivateDependencyModuleNames.AddRange(
			new string[] {
				"InputCore",
				"Slate",
				"SlateCore",
				"ShooterGameLoadingScreen",
				"Json"
			}
		);
		DynamicallyLoadedModuleNames.AddRange(
			new string[] {
				"OnlineSubsystemNull",
				"NetworkReplayStreaming",
				"NullNetworkReplayStreaming",
				"HttpNetworkReplayStreaming"
			}
		);
		PrivateIncludePathModuleNames.AddRange(
			new string[] {
				"NetworkReplayStreaming"
			}
		);
	}
}

これで Shooter Game プロジェクトを設定したので、Amazon GameLift SDK に再び注目しましょう。C++ SDK を Unreal Engine のプラグインとして利用したいので、このゲームエンジン用のバイナリを構築するコンパイルディレクティブを使用して SDK をコンパイルする必要があります。SDK ソースをダウンロードした状態で、オペレーティングシステムに基づいてソースから SDK をコンパイルできます。このプロジェクトには Windows マシンを使用しているため、次のステップを完了します。

  • コードのコンパイルから生成されたバイナリを保持する out ディレクトリを作成します。

mkdir out

  • 前に作成したディレクトリに移動します。

cd out

  • CMake を使用して、VS 2015 Win x64 のビルドシステムジェネレーターを指定し、UE コンパイルフラグを設定します。

cmake -DBUILD_FOR_UNREAL=1 -G “Visual Studio 14 2015 Win64” <ソースディレクトリ>

  • 選択したビルドシステム (このプロジェクトの場合は MS Build) を使用してバイナリを作成する C++ プロジェクトを構築します。

msbuild ALL_BUILD.vcxproj /p:Configuration=Release

ライブラリをコンパイルしたので、Amazon GameLift Unreal Engine プラグインを使用するために次のバイナリファイルが必要です。

Linux:

* out/prefix/lib/aws-cpp-sdk-gamelift-server.so

Windows:

* out\prefix\bin\aws-cpp-sdk-gamelift-server.dll

* out\prefix\lib\aws-cpp-sdk-gamelift-server.lib

次に示すように、私は Windows を使用しているため、コンパイルされた Amazon GameLift ライブラリ aws-cpp-sdk-gamelift-server.dll および aws-cpp-sdk-gamelift-server.lib はそれぞれ prefix\bin および prefix\lib フォルダにあります。

GameLiftSDK Unreal Engine プラグインフォルダにバイナリをコピーすると、Amazon GameLift プラグインフォルダが設定され、Unreal Engine ゲームプロジェクトに追加する準備が整います。これを踏まえて、Unreal Engine の ShooterGame プロジェクトに Amazon GameLift プラグインを追加します。Unreal Engine Editor を使用してプラグインを追加できますが、その代わりに、Visual Studio プロジェクトに留まり、ゲームディレクトリとプロジェクトファイルを更新してプラグインを追加します。

Windows エクスプローラーで、Plugins というフォルダを ShooterGame ディレクトリに追加し、準備した GameLiftServerSDK フォルダを、Unreal Engine のプラグインに関するドキュメントに示されているように、このディレクトリにコピーします。

ここで、ShooterGame.Build.cs ファイルを開きます。これはゲームの依存関係に関する情報を保持する C# ファイルです。

ファイル内で次のコードを追加します。

PublicDependencyModuleNames.AddRange(
            new string[] {
                "Core",
                "CoreUObject",
                "Engine",
                "InputCore",
                "GameLiftServerSDK"
            }
       );

これまでに行った変更とすべてが同期されていることを確認するため、Visual Studio を閉じ、UE Editor に戻って [Refresh Visual Studio Project] を選択します。

完了したら、[Open Visual Studio] を選択します。ShooterGame ディレクトリに追加した Plugins フォルダがプロジェクトに含まれていて、Solution Explorer で表示できます。

次に、ソリューション全体を再構築して、Amazon GameLift SDK バイナリをプロジェクトに統合します。

UE Editor に戻り、ツールバーの [Build] を選択して、Amazon GameLift プラグインの側面が ShooterGame に含まれていることを確認します。コンパイルが完了したら、[Settings] ツールバーを簡単に確認します。[Plugins] オプションには Amazon GameLift プラグインが追加されていて、プロジェクトで認識されていることがわかります。[Enabled] チェックボックスを選択します。これにより、UE Editor の再起動が求められます。[Restart Now] を選択し、Unreal Engine がゲームコードファイルを再構築できるようにします。

ビルドが完了すると、エディタが再起動し、ShooterGame がもう一度開かれます。

これで ShooterGame プロジェクトで Amazon GameLift SDK の使用に関する設定が完了しました。Unreal エディタを開いた状態で、[Open Visual Studio] メニューオプションに移動し、ShooterGame コードに戻ります。これにより、Visual Studio およびゲームコードが開きます。Visual Studio を開いた状態で、ShooterGameMode.cpp ファイルに移動し、コードを追加して Amazon GameLift SDK を初期化します。Shooter Game プロジェクト内で Amazon GameLift に正しくコードを追加するために実行する必要がある主要なことは、次のとおりです。

  1. フラグ WITH_GAMELIFT=1 を使用してプリプロセッサ条件内で Amazon GameLift コードを囲みます
  2. 対象のサーバー OS (Linux など) 用に、Unreal Engine で専用サーバーを構築します
  3. ビルドの対象がゲームサーバータイプであることを確認します (Type == TargetRules.TargetType.Server)

Unreal Engine プロジェクトで Amazon GameLift を追加するために必要なコードの例は、こちらのドキュメントに記載されています。さらに、Unreal Engine wiki で提供されている Windows および Linux 向けの専用サーバーガイドに従って、Unreal Engine の専用サーバーを構築する方法を参照できます。これらの資料を利用すると、Amazon GameLift をゲームプロジェクトに首尾よく統合できます。Unreal Engine ゲームエンジンへの Amazon GameLift SDK の組み込みについて簡単に説明しましたが、Amazon GameLift SDK を Unity など C# エンジンに追加するオプションもあることを忘れないでください。Amazon GameLift Server SDK をダウンロードし、.Net framework 3.5 ソリューションをコンパイルすることで、GameLiftServerSDKNet35.sln になります。GameLiftServerSDKNet35.sln ソリューションを使用すると、Amazon GameLift ライブラリを Unity3D プロジェクトに追加することができます。Amazon GameLift C# Server SDK プラグインのセットアップと使用の詳細については、Amazon GameLift SDK ドキュメント「Unity での C# サーバー SDK の使用」を参照してください。

要約
Amazon GameLift マネージド型サービスに追加された新しい側面の 1 つのみを説明しましたが、このサービスは開発者やゲームスタジオに対してさらに多くの機能を提供しています。Amazon GameLift は、DDoS 攻撃からゲームを防御しながら、インフラストラクチャの管理、キャパシティーのスケーリング、利用可能なゲームセッションへのプレイヤーのマッチングを簡単にして、分散型ゲームを構築できます。

Amazon GameLift サービスの詳細については、Amazon GameLift のドキュメントと Amazon GameLift 開発者ガイドを参照してください。また、Amazon GameDev チュートリアルページの Amazon GameLift チュートリアルを確認して、Amazon GameLift サービスを使用したゲーム開発を本格的に開始することができます。どうぞゲームをお楽しみください。

Tara