Skip to main content
Epic Online Services でできること
Epic Games Japan
Software Engineer, Developer Relations
寺内 大起
#UE4 | @UNREALENGINE
はじめに
Epic Games は全てのゲーム開発者が利用可能なプラットフォームフリーなオン
ラインサービスとして Epic Online Services (EOS)を提供します。
EOSはあらゆるメジャーなプラットフォームから利用可能な様々な機能を持って
おり、どのようなエンジン/ストアとも統合可能です。
本日は、EOSが提供する機能の説明及びSampleを用いて実際の動作をご紹介させ
ていただきます。
#UE4 | @UNREALENGINE
今日のゴール
EOSを使うと
何ができて、何ができないのか
がイメージできる
#UE4 | @UNREALENGINE
目次
● EOSとは
● SDKについて
● 具体的にできること
● まとめ
#UE4 | @UNREALENGINE
目次
● EOSとは
● SDKについて
● 具体的にできること
● まとめ
#UE4 | @UNREALENGINE
https://dev.epicgames.com/ja/services
EOSとは
#UE4 | @UNREALENGINE
目次
● EOSとは
● SDKについて
● 具体的にできること
● まとめ
#UE4 | @UNREALENGINE
SDK について
DevPortal(https://dev.epicgames.com/portal/)からダウンロード可能
- C++, C#, iOS用SDKの3種類 (SDK1.7 時点)
※ 各コンソール向けSDKは別途リクエストが必要
#UE4 | @UNREALENGINE
SDK はdll (C++) に加えてサンプルアプリケーションを含む
SDK について
#UE4 | @UNREALENGINE
SDK について
EOS SDKの設定方法からサンプルアプリケーションの実行までの手順の解説動画
https://youtu.be/NOoLPGENwrg
#UE4 | @UNREALENGINE
SDK を呼び出す Client
SDKを呼び出す際、必ずClient ID/Secretを設定する必要がある
- DevPortalからClient IDの発行が可能
- Roleによって、権限が異なり、同じAPI でも出来ることが変わる場合がある
Client Role 権限範囲
Game Client
ローカルにログインしているユーザとしてのみ
振る舞うことが可能
Game Server
ログイン不要で全ユーザの
データにアクセス可能
※Dedicated サーバでの利用を推奨
#UE4 | @UNREALENGINE
EOS SDK の補足
Unreal Engine との連携は現状ありません
- 他のゲームエンジンから利用するのと同様に、SDKをご利用ください
他プラットフォームサービスとの連携はアカウント認証のみ
- 実績/ゲームセッション等、他プラットフォームの類似サービスもあります
が、それらと連動はせず、独立して動作します
#UE4 | @UNREALENGINE
目次
● EOSとは
● SDKについて
● 具体的にできること
● まとめ
#UE4 | @UNREALENGINE
提供するサービス群
Epic Online Services ドキュメント (https://dev.epicgames.com/docs/services/ja/)
#UE4 | @UNREALENGINE
提供するサービス群
- で、具体的に何ができるの?
#UE4 | @UNREALENGINE
アカウントの認証/紐付け
#UE4 | @UNREALENGINE
ユーザ認証
オンラインサービスを利用する時、多くの場合
利用者のアカウントを認証する必要がある
EOSは、様々なアカウントでの認証に対応
- Epic Games アカウントでの認証
- 外部アカウントでの認証 (Steam, etc)
#UE4 | @UNREALENGINE
認証の流れ
SDK
EOS 認証/認可
サービス
外部Identity Provider
(Epic, Steam, etc)
EOS User
サービス
EOS
Endpoint
1. 認証情報を提供
2. ユーザ認証
3. EOSアカウント
情報とMapping
#UE4 | @UNREALENGINE
認証に必要な設定
DevPortal上で、各Identity Providerの設定を行う必要がある
- Epic Games アカウント
- Epic Account Services
- 外部アカウント
- それぞれのIdentity Providerで必要になるCredential/URL等の設定
#UE4 | @UNREALENGINE
ユーザ認証補足
EOSでは各アカウントの情報は、製品 (Product) × ユーザー単位で割り当てられ
る 製品ユーザーID(Product User ID) で管理される
ロ
グ
イ
ン
ロ
グ
イ
ン
ゲームA
- Product User ID: ABCD
ゲームB
- Product User ID: 1234
Epic Games アカウント で認証
アカウントID: Terauchi
#UE4 | @UNREALENGINE
ユーザ認証
Auth Interface
- Epic Games アカウントを利用する場合
- EOS_Auth_Login()
Connect Interface
- Epic Games アカウント以外のアカウント (Steam 等)を利用する場合
- EOS_Connect_Login()
#UE4 | @UNREALENGINE
外部アカウントの紐付け
Connect Interface
- 製品ユーザー ID の新規発行
- EOS_Connect_CreateUser()
- 指定した外部アカウントに対応する製品ユーザIDが未作成
(= EOS_Connect_Login() でユーザが見つからなかったとき) に利用
- 既存の製品ユーザーIDへの、外部アカウント紐付け
- EOS_Connect_LinkAccount ()
- 既存の製品ユーザIDに対して、別の外部アカウントを紐付けたい場合に利用
- EOS_Connect_Login() から取得できる Continuance Token を使う
#UE4 | @UNREALENGINE
フレンドリスト
#UE4 | @UNREALENGINE
フレンドリスト
Epic Games アカウントを利用している場合、
そのユーザのフレンドリストを取得可能
※ SDK1.7時点では、フレンド申請や削除等、フレンド
リストを更新するAPIは全て利用不可能となっています
フレンドのステータス(ログイン等)が変更され
た際に通知を受け取ることが可能です
#UE4 | @UNREALENGINE
フレンド操作
Friends Interface
- フレンドリストを取得
- EOS_Friends_QueryFriends()
- フレンドのステータス変更通知を受け取る
- EOS_Friends_AddNotifyFriendsUpdate()
#UE4 | @UNREALENGINE
フレンド情報の表示
ゲーム内で実装せずとも、Social Overlayを利
用することで、フレンドリスト及びそのステー
タスを確認可能
- Shift + F3 で表示可能
#UE4 | @UNREALENGINE
ゲーム内情報 (Stats) の集計
#UE4 | @UNREALENGINE
ゲーム内情報 (Stats)の集計
DevPortal上でゲーム内情報を定義し、ゲームか
ら送信することで自動的な集計を可能とする
- 敵を倒した数
- ゲーム内で死んだ回数
- ミニゲームの最高得点
- ヘッドショット回数
- etc.
1ゲーム当たり最大500種類のStatsを定義可能
各ユーザ単位で集計される
#UE4 | @UNREALENGINE
集計出来るデータ
数値データのみ集計可能
- 文字列等は未対応
クエリ時に期間指定が可能で、特定の期間内の集計値を後から取得可能
サポートしている集計方法は以下の4種類
- SUM : 合計値 (敵を倒した数, 強制切断回数, etc)
- MAX : 最大値 (最高得点, etc)
- MIN : 最小値 (最速ラップタイム, etc)
- LATEST : 最新値 (最後に利用した装備セット, etc)
#UE4 | @UNREALENGINE
ゲーム内情報 (Stats)の集計
Stats Interface
- Statsの送信
- EOS_Stats_IngestStat()
- ユーザの特定期間のStatsを取得
- EOS_Stats_QueryStats()
Game Server権限ならば、全てのユーザのStatsの更新/取得が可能
eg. 「イイね!」された数の計測等、他者から実行されたアクションも集計可能
#UE4 | @UNREALENGINE
ゲーム内実績の設定/解除
#UE4 | @UNREALENGINE
ゲーム内実績の設定/解除
ドラゴンを30体倒
した!
ラスボスを倒した! 100万点以上獲得!
1分以内に
ゴールした!
#UE4 | @UNREALENGINE
ゲーム内実績の設定/解除
DevPortalで実績 (Achievement)を設定可能
- Stats を元にして自動的に実績解除が可能
eg. kill_count_dragon が 10以上なら、 実績“Dragon Slayer”を解除
- 複数のStatsを取得条件に設定することも可能
- Stats を使わない実績を作りたい場合はダミーのStatsを用意する必要有り
- 別途 EOS_Achievements_UnlockAchievements() を使って解除する
#UE4 | @UNREALENGINE
ゲーム内実績の設定/解除
Achievement Interface
- 実績の定義を取得する
- EOS_Achievements_QueryDefinitions()
- 実績の進捗状況を取得する
- EOS_Achievements_QueryPlayerAchievements()
- 実績を強制的に解除する (Game Serverのみ利用可能)
- EOS_Achievements_UnlockAchievements()
#UE4 | @UNREALENGINE
実績の表示
ゲーム内で実装せずとも、Social Overlayを利
用することで、実績の達成状況を確認可能
- Shift + F3 で表示可能
#UE4 | @UNREALENGINE
リーダーボード
#UE4 | @UNREALENGINE
リーダーボード
Statsを元にしたリーダーボードを作成可能
- 各コースの世界最速ランキング
- 世界最高スコアランキング
- フレンド間でのクリアタイムランキング
- etc.
グローバルなリーダーボードと
ユーザを指定したリーダーボードがある
#UE4 | @UNREALENGINE
グローバルなリーダーボード
全プレイヤーを対象に、上位1000人までを管理するリーダーボード
事前にDevPortal で定義を作成しておく必要あり
- 最大50個作成可能
- Stats を指定すると、それを元に自動的にランキングが集計される
- Stats の集計方法によってランキングの付け方が自動的に決定される
eg. “stage_1_clear_time (MIN)” の昇順ランキング
#UE4 | @UNREALENGINE
ユーザを指定したリーダーボード
指定したユーザのStatsを読み取って、リーダーボードの様に見せかけて返す
- 製品ユーザーID 及び Statsを指定してランキングを取得可能
- 同時に指定可能なユーザ数は 32人 まで
- フレンド間のランキングなど、特定のユーザ間でのランキングに利用できる
#UE4 | @UNREALENGINE
リーダーボードの取得
Leaderboards Interface
- グローバルなリーダーボード
- EOS_Leaderboards_QueryLeaderboardDefinitions()
- 定義の取得
- EOS_Leaderboards_QueryLeaderboardRanks()
- ランキングの取得
- ユーザ指定したリーダーボード
- EOS_Leaderboards_QueryLeaderboardUserScores()
- ユーザ間でのランキングの取得
#UE4 | @UNREALENGINE
ゲームセッションの検索
#UE4 | @UNREALENGINE
ゲームセッション
ここで想定しているゲームセッションとは
- 各ゲームにおける1プレイ単位
- 比較的短時間で終了する (数分 ~ 数時間)
- 開始と終了が明確に存在している
- オンラインでの複数人プレイ
シューターゲームの1マッチ、レースゲームでの1レース等
#UE4 | @UNREALENGINE
ゲームセッションの検索
古城のステージ
で戦いたい!
10人以上参加してい
るセッションがいい
友達のセッションに参
加したい!
Level50以下の人
だけ参加出来るように
制限したい
#UE4 | @UNREALENGINE
ゲームセッションの登録
ゲームセッションの情報を登録
- ホストのIP等、接続確立に必要な情報
- ゲームセッションのステータス (開始前, プレイ中)
- 検索条件としてのメタデータ情報 (ステージ名, 難易度, etc)
- オプションとして参加者情報
※ 検索を可能にするだけであり、実際のゲームセッション管理、参加者の増減、
コネクション確立等はゲーム側でハンドルし、EOS側に反映する必要が有る
- セッションに参加する際の手順
- 参加希望者がセッション詳細から接続先を確認
- ゲーム内でコネクション確立
- セッション所有者がセッション情報を更新
#UE4 | @UNREALENGINE
ゲームセッションの表示
同時に複数のゲームセッションに参加可能
参加者がEpic Games アカウントの場合、
プレゼンスにゲームセッションを表示可能
(最初の1つのみ)
- Social Overlay のプレゼンス表示から、
セッションへの招待/参加等が可能
#UE4 | @UNREALENGINE
ゲームセッションの検索
Session ID による検索
- 既にIDを知っている場合の検索方法
- 招待を受けている場合、プレゼンス情報を利用する場合など
製品ユーザID による検索
- 製品ユーザID を指定し、そのユーザが参加しているゲームセッションを検索
- フレンドのゲームセッションを探したい場合など
属性値による検索
- ゲームセッションに設定されている属性値を使って検索
- ランダムに参加するセッションを検索したい場合
-
#UE4 | @UNREALENGINE
属性値による検索
各ゲームセッションが持つ属性情報を元に、条件検索が可能
- 各属性値に対してフィルタ条件を設定可能 (組み合わせ検索可能)
- 数値属性 : =, ≠ , <, >, ≦, ≧
- 文字列属性: セミコロン区切りで指定した、いずれかの文字列を含む or どれも含まない
- 数値属性を利用してソート可能
- 基準数値を指定し、そこからの絶対距離でソート可能
ステージ5
難易度はHARD
参加者の平均レベ
ルで昇順ソート
#UE4 | @UNREALENGINE
ゲームセッションの登録
Sessions Interface
- セッションの作成/更新/破棄 (Game Serverのみ利用可能)
- EOS_Sessions_CreateSessionModification()
- EOS_Sessions_UpdateSession()
- EOS_Sessions_DestroySession()
- メンバー管理 (Sessionの所有者が実行する)
- EOS_Sessions_RegisterPlayers()
- EOS_Sessions_UnregisterPlayers()
#UE4 | @UNREALENGINE
ゲームセッションの検索
Sessions Interface
- セッションへの招待/拒否
- EOS_Sessions_SendInvite()
- EOS_Sessions_RejectInvite()
- セッションの検索
- EOS_SessionSearch_Find()
- EOS_Sessions_CreateSessionSearch() で検索条件を指定しておく
- EOS_SessionSearch_SetSessionId(): Session ID による検索
- EOS_SessionSearch_SetTargetUserId(): 製品ユーザID による検索
- EOS_SessionSearch_SetParameter(): 属性値による検索
#UE4 | @UNREALENGINE
Sessions Interfaceの注意点
基本思想は、Dedicatedサーバなどのセッション集中管理システムが存在し、
Sessions Interfaceを呼び出す前提
- ホスト (セッション作成者)のみがセッションの状態を更新可能
- ネットワーク切断時などのホストの移譲などはサポートされていない
- P2P接続で管理されるセッションでの利用には若干不向き
- エラーハンドリング等が複雑になる
#UE4 | @UNREALENGINE
ロビー管理
#UE4 | @UNREALENGINE
ロビーとは
ゲームセッションより長期的なグループ
- 他のユーザーとのチャット
- 他のプレイヤーの参加を待機
- チームの編成
- ゲーム前のオプション選択
- etc
複数のゲームセッションを繰り返していく
グループ
#UE4 | @UNREALENGINE
ロビー
バックエンド的にはゲームセッションと共有しているが、細かい違いが有る
- Game Client Role でロビーが作成できる
- 所有者を移譲可能
- 現所有者がLeaveした場合、自動的に新しい所有者が決定される
- 参加者管理は各メンバーのJoin/Leave or Kickoutで行う
- ゲームセッションの場合、所有者が責任を持って更新する必要がある
- 参加者/所有者に変更があった場合、全参加者に通知が飛ぶ
#UE4 | @UNREALENGINE
ロビー管理
Lobby Interface
- ロビーの作成/更新/破棄
- EOS_Lobby_CreateSessionModification()
- EOS_Lobby_UpdateSession()
- EOS_Lobby_DestroySession()
- ロビーへの参加/離脱
- EOS_Lobby_JoinLobby()
- EOS_Lobby_LeaveLobby()
#UE4 | @UNREALENGINE
ロビー管理
Lobby Interface
- ロビーへの招待/拒否
- EOS_Lobby_SendInvite()
- EOS_Lobby_RejectInvite()
- ロビーの検索
- EOS_LobbySearch_Find()
- EOS_Lobby_CreateLobbySearch() で検索条件を指定しておく
- EOS_LobbySearch_SetLobbyId(): Session ID による検索
- EOS_LobbySearch_SetTargetUserId(): 製品ユーザID による検索
- EOS_LobbySearch_SetParameter(): 属性値による検索
#UE4 | @UNREALENGINE
P2P接続
#UE4 | @UNREALENGINE
P2P接続
製品ユーザーID で指定した相手とP2P 接続の
確立、データの送受信が可能
- STUNによるNAT越えをサポート
- 対称型NAT等でNAT越えに失敗した場合、
自動的にTURNサーバによるパケットリ
レーに切り替えるオプションもある
- パケットの到達/順序保証は、オプション
で選択可能
#UE4 | @UNREALENGINE
P2P接続
NAT P2P Interface
- パケットの送信
- EOS_P2P_SendPacket()
- 接続が未確立の場合、コネクションリクエストが相手に通知される
- コネクションリクエストの承認
- EOS_P2P_AcceptConnection() or EOS_P2P_SendPacket()
- リクエストの通知は EOS_P2P_AddNotifyPeerConnectionRequest() で受付ける
- コネクションの破棄
- EOS_P2P_CloseConnection()
#UE4 | @UNREALENGINE
ユーザごとのデータストレージ
#UE4 | @UNREALENGINE
ユーザごとのデータストレージ
ゲームごとのユーザー固有のデータをオンライ
ン上に保存可能
eg. デバイス間でのセーブデータ共有等
- 暗号化をサポート
- 200MBのファイルまでアップロード可能
- 1人あたり最大400MBまで利用可能
現時点では、アップロードしたファイルを他のユーザと
共有することは出来ません
#UE4 | @UNREALENGINE
ユーザごとのデータアップロード
Player Data Storage Interface
- ファイル情報の取得
- EOS_PlayerDataStorage_QueryFileList()
- EOS_PlayerDataStorage_QueryFile()
- ファイルの読み出し/書き込み/削除
- EOS_PlayerDataStorage_ReadFile()
- EOS_PlayerDataStorage_WriteFile()
- EOS_PlayerDataStorage_DeleteFile()
#UE4 | @UNREALENGINE
ゲームプレイ統計情報の送信
#UE4 | @UNREALENGINE
ゲームプレイ統計情報の送信
ゲームのプレイ状況を送信することで、
DevPortal上から統計情報として確認可能
- 現在の同時接続数
- 過去のプレイヤー数の記録
- ユーザのリテンション状況
- etc.
ゲーム開始 or 終了
#UE4 | @UNREALENGINE
ゲームプレイ統計情報の送信
Metrics Interface
- プレイセッションのレポート (リテンション状況の集計に使用される)
- EOS_Metrics_BeginPlayerSession()
- EOS_Metrics_EndPlayerSession()
- 同時接続数の収集
- オンラインのマシンでSDK の初期化を行うと自動的に集計される
#UE4 | @UNREALENGINE
ゲームプレイ統計情報の送信
実際のDevPortalの画面
#UE4 | @UNREALENGINE
制限事項等
#UE4 | @UNREALENGINE
サービスの使用上の制限事項
各サービスごとの詳細は下記を参照
https://dev.epicgames.com/docs/services/ja/DevPortal/UsageLimitations/index.html
#UE4 | @UNREALENGINE
目次
● EOSとは
● SDKについて
● 具体的にできること
● まとめ
#UE4 | @UNREALENGINE
まとめ
● EOSが提供する機能について概要を説明しました
● アカウントの認証/紐付け
● フレンドリスト
● ゲーム内情報 (Stats) の集計
● ゲーム内実績の設定/解除
● リーダーボード
● ゲームセッションの検索
● ロビー管理
● P2P接続
● ユーザごとのデータアップロード
● ゲームプレイ統計情報の送信
● 制限事項等
#UE4 | @UNREALENGINE
おわりに
Epic Online Services は2020/06に正式サービスインしたばかりのプラット
フォームですが、非常に早いサイクルで機能拡張が続けられています。
今後もさらなる機能追加や改善が行われていきますので、ご期待ください。
EOSは永続的に無料ですので、ぜひ皆さん一度触ってみてください!
コミュニティへの参加もお待ちしております。
https://eoshelp.epicgames.com/s/?language=en_US
#UE4 | @UNREALENGINE
EOF