AWS GameKit plugin for Unreal Engineを使ってみた
AWSよりAWS GameKitというサービスが公開されました。このサービスを利用することによりUnrealEngine(以降、UEと表記)で開発されたゲームに対して、ユーザ登録、ログイン、ゲーム情報の保存といった機能が手軽に実装できます。
UE4ユーザとして、一度試してみなくては!ということで、AWS GameKitを使ってみました。
AWS GameKitとは
あらためてAWS GameKitについて解説します。このAWS GameKitはUE向けのプラグインとして提供されています。AWSの各種サービス(例えばLambda、DynamoDBなど)に詳しくなくてもゲームに必要な環境がAWSに構築でき、開発者はUEで必要な機能を実装するだけで機能が実現できるサービスです。
このAWS GameKitを利用することで実現できる機能は、現時点では次の通りです。
- ユーザ登録・認証
- アチーブメント(報酬)
- ゲーム情報のセーブ
- ゲームデータのクラウド保存
GameKit自体は無料ですので、AWSの各種サービス利用料金のみ発生します。またAWS GameKitで使われているソースコードやサンプルコードはすべてgithubで公開されていますので、自由に機能を追加することも可能です。
裏側の仕組み
通常、ユーザ登録、ログイン機能を実装するためにはAWS側に何かしらのAPIやデータベース等などを設計し、環境を構築する必要があります。が、AWS GameKitでは、それらのAPIやデータベースの構築などは、GameKitにあらかじめ用意された定義(CloudFormationで行います)を元に構築する仕組みとなっています。また、APIやデータベースの構築の指示はすべてUEのGameKitプラグインから行うので、AWSコンソールにログインする必要はありません。
このブログでは、簡単に手順を解説しています。詳細なドキュメントは、AWS GameKitに書かれています。
準備
AWS GameKitを利用するために以下の環境を用意しました。
- UE 4.27
- VisualStudio 2019
AWS GameKitはUEの最新版のみ対応する予定となっています。今回は4.27を利用しています。またこのプラグインを利用するには C++のコードをビルドするため、Visual Studio 2019が必要です。
VisualStudio 2019とあわせて、いくつかのライブラリ、コンポーネントをインストールする必要があります。それらはInstall the AWS GameKit plugin - AWS GameKitに書かれています。
AWS GameKitをダウンロードする
では実際にUEのプロジェクトを作成し AWS GameKitを利用できるよう設定していきます。
AWS GameKitは、AWS GameKitから、”Download AWS GameKit plugin for Unreal Engine”のバナーをクリックしてダウンロードします。現時点では、AwsGameKitUnrealPlugin_Windows_v1.0.0.zipというファイルがダウンロードされます。
次に UEのプロジェクトを作成します。何でもよいのですが、ここではFirstPersonのプロジェクトで作成してみました(プロジェクト名はAWSGameKitSample1としました)。プロジェクトを作成する際、C++のプロジェクトとして作成しなければなりません。
次にAWS GameKitを先に作成したプロジェクトに登録します。先にダウンロードしたAwsGameKitUnrealPlugin_Windows_v1.0.0.zipファイルを展開するとAwsGameKitフォルダが作成されます。
AwsGameKitフォルダをプロジェクトにプラグインとして登録します。プラグインとして登録する際には、<プロジェクト名>/Plugins/Marketplaceフォルダを作成した後、MarketplaceフォルダにAwsGameKitフォルダをコピーします。
今回の場合だと、AWSGameKitSample1/Plugins/Marketplaceフォルダを作成した後にAwsGameKitフォルダをコピーすることになります。
slnファイルを再構築する
AwsGameKitフォルダをコピーした後、slnファイルの再構築を実施します。
AWSGameKitSample1.slnファイルを右クリックして、Generate Visual Studio profile filesを選択すると再構築されます。
プロジェクトをビルドする
次にVisual Studioからプロジェクトのビルドを行います。AWSGameKitSample1.slnファイルを開き、Visual Studioにてソリューションのビルドを行います。
プラグイン有効化を確認
AWSGameKitSample1プロジェクトを開き、プラグインが有効化されているか確認します。基本的には有効化されているはずですが、そうでない場合はEnabledにチェックをいれましょう。
また、プロジェクトを開いた際に、”Project is out of date. Would you like to update it?”とダイアログが表示された際にはUpdateを選択してください。
表示コンテンツの表示設定
このままだとAWS GameKitに含まれているサンプルコード等が見えない状況になっています。ので、AWS GameKit中のサンプルコード等がContentBrowserから見えるように設定を変更します。
ContentBrowserの右下のView OptionsからShow Plugin Contentにチェックを入れます。
プロジェクトのソースコードを変更する
GameKitのプラグインにある機能をコードから参照できるようにするため、プロジェクトのBuild.csファイルを編集します。今回は、AWSGameKitSample1\Source\AWSGameKitSample1フォルダにあるAWSGameKitSample1.Build.csファイルを編集します。
Build.csファイル中のPublicDependencyModuleNamesとPrivateDependencyModuleNamesに、 "AwsGameKitCore", "AwsGameKitRuntime" を両方追加します。PrivateDependencyModuleNamesが存在しない場合は追加してください。
今回のプロジェクトでは、追加後は以下のようになりました。
public class AWSGameKitSample1 : ModuleRules { public AWSGameKitSample1(ReadOnlyTargetRules Target) : base(Target) { PCHUsage = PCHUsageMode.UseExplicitOrSharedPCHs; PublicDependencyModuleNames.AddRange(new string[] { "Core", "CoreUObject", "Engine", "InputCore", "HeadMountedDisplay", "AwsGameKitCore", "AwsGameKitRuntime" }); PrivateDependencyModuleNames.AddRange(new string[] { "AwsGameKitCore", "AwsGameKitRuntime" }); } }
AWSの設定
次にAWS側の設定を行います。AWS GameKitではユーザ管理等に必要なインフラ構築をCloudFormationで行っています。そのため、それらの実施に必要なIAMのPolicyとUserを作成しておく必要があります。
これらの設定も自動で行えますが、内容を確認するために手動で設定しました。
Policyの作成
最初にPolicyを作成します。登録するPolicyの内容は、AwsGameKitのプラグイン中にある、Resources\cloudResources\policies\GameKitDeveloperPolicy_Template.jsonファイルがベースとなります。
Policyの登録前に先のjsonファイルの内容を一部更新する必要があります。先のjsonファイル中に<YOUR_ACCOUNT_ID>と記載がある箇所がありますが、これを自分のアカウントID(9桁の数値)に置換しておかなければなりません。
ファイルの編集が終わった段階で、このjsonファイルの内容を元にAWSコンソールのIAMからAccess management > Policiesを選択、Create Policyボタンを押します。
あとは先に用意したjsonファイルを以下のように貼り付けPolicyを作成します。Policy名は任意ですが、ここではGameKitDeveloperPolicyとしました。
Userの作成
次にUserを作成します。
IAMからAccess management > Usersを選択し、Add Usersボタンを押します。
名前は任意ですが、ここではGameKitDeverloperUserとしました。
ユーザを作成する際には、Access KeyとPasswordの両方にチェックを入れます。
次に設定するパーミッションですが、先ほど作成したGameKitDeveloperPolicyのみを付与します。
そして、ユーザの作成が完了すると、アクセスキーやシークレットアクセスキーが表示されますので、それを控えておきます。それらが記載されたcsvファイルのダウンロードでもかまいません。
GameKit pluginの設定を行う
長々と設定してきましたが、もう一息です。あとGameKit pluginの設定を行います。
必要な設定としては、以下の通りです。
- プロジェクト名
- 環境(Develop,QAなど)
- リージョン
- アクセスキー
- シークレットアクセスキー
ここで登録するアクセスキー、シークレットアクセスキーは、先に作成したユーザであるGameKitDeverloperUserを作成した際に発行されたものを指定します。
上記の項目を登録した後にsubmitを押します。これが正常に終われば、ようやくGameKitが使える準備が整いました。
ユーザ登録・ログインを使う
ではGameKitを使った実例として、ここではユーザ登録、ログインができるようにしてみます。
本エントリーでは、動作検証程度の使い方にとどめています。しっかりゲームに組み込むためには、もう少しコードを書く必要があるかと思います。
ユーザ登録、ログインができるようにするため、次の処理を行います。
- サーバ環境の構築
- フロント側のコード追加
サーバー環境の構築
サーバー構築は、GameKitプラグインから行います。
Identity And Authenticationの項目にある、Login mechanism > Email / Passwordにチェックがはいってることを確認します。これで、ユーザ登録・ログインはEmailとパスワードを指定する形式が利用できます。
その後に、AWS resource actions > Createボタンを押します。これだけです。Createボタンを押した後は、GameKitプラグインがCloudFormationを使ってログインで利用するAPI GatewayやDynamoDBなどの設定が行います。
生成後にDynamoDBのコンソールをみてみると、作成されている様子が確認できます。テーブル名も、gamekit_<環境>_<プロジェクト名>_identitiesといったように、プロジェクト、環境別にテーブルが作成されることがわかります。
フロント側のコード追加
フロント側の構築を行います。フロント側では、レベルにContentを追加することで、ユーザ登録ができるようになります。
まず最初にContentBrowserからAwsGameKit C++ Classes > AwsGameKitEditor > Public Identityへ行き、AwsGameKitIdentityExamplesをレベルへDrag & Dropします。
すると、AwsGameKitIdentityExample1が生成されます。Detailsには、プレイヤー登録、ユーザ認証コードの再送信などさまざまな機能が呼び出せるようになっています。
ユーザ登録してみる
ここでは、ユーザ登録(register Player)を使ってみます。User Name, Email, Passwordに項目を設定した後に Call Register Apiボタンを押します。すると、ユーザ登録処理が実行されます。
ユーザ登録が成功したか、失敗したかは、Return Valueの欄に表示されます。Passwordが単純なものだとエラーとなり、Return Valueにはエラーである旨が表示されます。エラーの詳細についてはOutput Logに表示されます。
ユーザ登録のレコードを確認する
では、登録されているユーザの情報をみてみましょう。先ほど作成されたDynamoDBのレコードをみてみます。先ほどは存在しなかったユーザのレコードが追加されていることが確認できます。
今後の展開
ver 1.0.0なので、これからもっと様々な機能が追加されることが予想されます。今後も注目しつつ、何か新しい機能が追加された場合は、またご紹介したいと思います。