【技術解説】Epic Online Serviceを試してみた
こんにちは、デザイニウムのWilliamです。『Unreal Engine』や『フォートナイト』を開発しているEpic GamesがEpic Online Serviceを無料公開しました。
こちらの記事によるとEpic Online Serviceは、一つのSDKで以下のような様々なサービスをクロスプラットフォームで提供しています:
ゲーム サービスでは、ロビー / マッチメイキング / ピアツーピア接続 / プレイヤー データ ストレージ / アチーブメント / スタッツ / リーダーボード / ゲーム分析 / プレイヤーのチケット発行が提供されます。他にもボイスチャットなどの機能が順次追加されます。これらのサービスは、独自のアカウント システムやプラットフォームのアカウント システムと共に利用することができます。または、Epic Games アカウントを利用するという選択も可能です。
Epic アカウント サービスでは、クロスプラットフォーム アカウント / ログイン / フレンド / プレゼンス機能がサポートされています。Epic アカウント サービスは、コンソール アカウント システムと相互運用が可能です。7 種のプラットフォームのデバイスは合計で 5 億台にのぼり、プレイヤーは 3 億 5 千万人、そのフレンドは 22 億人になります。Epic アカウント サービスがあれば、これらのユーザーに働きかけることが可能です。
なので、今回はEpic Online Service(以下EOS)の内容について、実際にSDKをダウンロードして検証したいと思います。
1. EOSサンプルプロジェクトをビルドする
EOSが提供しているSDKの中にはいくつのサンプルプロジェクトがありますので、今回はそれを実行する検証を行います。先ずはEpic Online Serviceのホームページ、右上のデベロッパーポータルをアクセスする。Epic Games Accountが必要になるので、新しいアカウントを作成、またはログインしてください。
ダッシュボードから、または左側のSDKメニューからSDKをダウンロードできるページにアクセスできます。今回の検証は先ずVisual Studio 2017向けのSDKをテストします。
ダウンロードしたSDKを解凍して、EOS-SDK-13289764-v1.6/SamplesのフォルダにはSample.slnのプロジェクトデータがあります。それをVisual Studioで開きます。Windows 64bitで、Microsft Visual Studio Community 2017(Version 15.9.4)、そしてVisual C++のパッケージがインストールすれば、大体プロジェクトをビルドできると思います(フォルダにCmakeがあったので、多分Cmakeのパッケージも必要です)。
色んなビルド方法がありますが、今回はWindows DirectX (Win64)でビルトしてみました。
Simple Frameworkを無事に実行出来ましたが、動作していませんでした。ディバグログに調べると色んなIDやキーが必要でした。
必要なIDは5つあります:Product ID、Sandbox ID、Deployment ID、Client Credentials ID、Credentials Secret Key。そして以上のIDは全部デベロッパーポータルの新しいプロダクトを設定してから獲得できます。
Product ID、Sandox ID、Deployment IDはプロダクトを作成の時に一緒にデフォルトで生成されました。(新しく作成も可能です)
Client Credentials ID、Credentials Secret Keyだけはデフォルトで生成されていないので、新しいClientを作ることが必要です。
// Copyright Epic Games, Inc. All Rights Reserved.
#pragma once
struct SampleConstants
{
/** The product id for the running application, found on the dev portal */
static constexpr char ProductId[] = "";
/** The sandbox id for the running application, found on the dev portal */
static constexpr char SandboxId[] = "";
/** The deployment id for the running application, found on the dev portal */
static constexpr char DeploymentId[] = "";
/** Client id of the service permissions entry (Available for Epic Games Store) */
static constexpr char ClientCredentialsId[] = "";
/** Client secret for accessing the set of permissions (Available for Epic Games Store) */
static constexpr char ClientCredentialsSecret[] = "";
/** Game name */
static constexpr char GameName[] = "Simple Framework";
};
各プロジェクトのSourceフォルダにSampleConstants.hがあります、そこに各IDを入力してからリビルドします。
そして、Simple FrameworkにEOS SDKが無事に動作しました。
2. EOS機能確認の事前準備
EOSの機能を検証するためには先ず複数のEpic Gamesアカウントを準備した方がいいと思います。あとアカウントがお互いにフレンドになる必要があります。しかしフレンド申請は、別のソフトのEpic Games Launcherにしかできないので、それをインストールし、Epic Gamesアカウントをお互いにフレンドにしてください。
次はデベロッパーポータルのOrganizationメニューから検証したいEpic Gamesアカウントをチームに招待する必要があります(この後認証が必要ために)。
もう一つ必要なのは、プロダクトのEpic Account Servicesメニューから、認証の権限を与えること。私はPermissionsにOnline PresenceとFriendの状態確認の権限もRequiredに設定しました。
3. P2PNATサンプル検証
P2PNATとはP2P インターフェースによる NAT トラバーサルを使用したユーザー間のピアツーピア通信です。サンプルの中に3つのログイン方法がありましたがDevAuthツールでログインするしか動作できませんでした。
DevAuthツールとはEOS SDKから含まれたデベロッパー認証ツールです(SDKルート/SDK/Toolsの中にあります)。複数ユーザーの資格情報を保存できるため、ゲームを複数インスタンス実行して、マルチプレイヤー シナリオをテストできます。PortとCredential名(自定義)、そしてEpic Gamesアカウントをログインすれば使用できます。詳しい設定方法はこちらの記事のユーザーログイン(Dev Auth)の部分を参考してください:
P2PNATサンプルのアプリを二つ開いて、違うアカウントをDevAuthでログインをします(IPとPort、そしてCredential名を入力、例えば私は前にDevAuthツールで定義しました127.0.0.1:10001とDevAuthを使用しました)。最初の一回はブラウザがポップアップして、認証を行うことがあります。
ログインが成功すれば、右側のリストに登録したオンラインしているフレンドのオンライン状態を確認することができます。そしてオンラインしているフレンドを選択できます。左側はチャットUIとNat Statusが表示されています。今回のサンプルはP2Pなので二人しか会話できませんが、変更すればグループチャットも可能じゃないかなと思います。
4. Lobbiesサンプル検証
次に検証したのはLobbiesの待ちルーム機能です。P2PNATと同じフレンドを自分のロビーへ招待できます、そしてキック、オーナー変更などの機能があります。こちらの機能はSessionMatchMakingの機能と一緒に使って、マルチプレイのフローが作れると思います。
5. LeaderBoardサンプル検証
LeaderBoard機能を使うために、先ずはデベロッパーポータルのGameServiceメニューからStatとLeaderboardを追加しないといけません。
INGEST <STAT_NAME> <INGEST_AMOUNT>
そしてLeaderBoardアプリにログインしたら、先に作ったLeaderBoardを選択してコンソールから上記のコマンドを入力してデータをINGESTすることが出来ます。
成功するとLeaderBoardが自動に更新します。ユーザーと点数を一緒にランキング順番で並べることが出来ます。そのLeaderBoardの内容はデベロッパーポータルに反映されます。
6. 残りのサンプル
今回の検証には含まれていませんが、EOSの機能の参考として残りのサンプルもリストします(Developerドキュメントの説明を引用します):
Achievementsサンプル:プレイヤーのアチーブメント関するデータを取得したり、そのプレイヤーのアチーブメントをロック解除したり、アプリケーションに属するすべてのアチーブメントに関するデータを取得したりする方法をデベロッパーに提供します。
Player Data Storageサンプル:ユーザー アカウントに関連付けられているクラウド ストレージ用のシンプルなファイル エクスプローラです。アカウントを使用してログインまたはログアウトできます。ログイン中は、アカウントに関連付けられているファイルのブラウズやアップロード、ダウンロード、複製や削除を行うことができます。
Session Match Makingサンプル:EOS SDK のセッション マッチメイキング サンプルは、ゲーム セッション管理を表示します。ここでは、セッションの作成、ローカル セッションに関する情報の表示と変更、セッションの検索、現在のセッションへの参加、そしてフレンドの招待を行うことができます。
Storeサンプル:ストア サンプル は、Epic Online Services (EOS) SDK のゲーム内ストアに関連するクエリのオファーやチェックアウト処理などの操作を示します。
デペロッパーポータルから他の機能を管理するページがあります。Developerドキュメントに他の機能が詳しく書いていますので、ぜひそちらも参考してみてください。
7.まとめ
Epic Online Serviceが多くのオンライン機能を集中管理できることは、実に強力だと思います。しかし、現段階の検証によるとユーザーが必ずEpic Gamesアカウントが必要になることは結構縛られているので、案件によって使えない場合もあるかもしれません。C# SDKをUnityに導入することも検証してみましたが、ドキュメントが少なすぎて、なかなか上手くいきませんでした。今後さらに検証が出来次第、記事内容を追加したいと思います。
編集後記
広報のマリコです。ゲームといえばWilliam君というほどゲーム好きな彼の初記事が、「フォートナイト」や最近デモ動画がアップされて話題の「Unreal Engine5」をつくっているEpic GamesのEpic Online Service検証記事なのが彼らしいなと嬉しくなりました。しかもこのニュースは最近(5/12)公開されたばかり!スピード感もさすがです。社内のslackには”MHWチャンネル”というゲームチャンネルがあるのですが、私はそこでは彼をウィリアム先生と呼んでいます。先生っていうか、もはや神ですけどね。
The Designium.inc
・Interactive website
・Twitter
・Facebook