31K Views
July 20, 20
スライド概要
講演時は実演を交えていたため、ぜひ講演動画も併せてご確認ください。
講演動画はこちら
https://youtu.be/ASfE0T_-cmI
本スライドは2020年7月18日に行われた勉強会「 UNREAL FEST EXTREME 2020 SUMMER」の講演資料となります。
https://www.unrealengine.com/ja/events/unreal-fest-extreme-2020-summer
Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/
Epic Online Services でできること Epic Games Japan Software Engineer, Developer Relations 寺内 大起
はじめに Epic Games は全てのゲーム開発者が利用可能なプラットフォームフリーなオン ラインサービスとして Epic Online Services (EOS)を提供します。 EOSはあらゆるメジャーなプラットフォームから利用可能な様々な機能を持って おり、どのようなエンジン/ストアとも統合可能です。 本日は、EOSが提供する機能の説明及びSampleを用いて実際の動作をご紹介させ ていただきます。 #UE4 | @UNREALENGINE
今日のゴール EOSを使うと 何ができて、何ができないのか がイメージできる #UE4 | @UNREALENGINE
目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE
目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE
EOSとは https://dev.epicgames.com/ja/services #UE4 | @UNREALENGINE
目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE
SDK について DevPortal(https://dev.epicgames.com/portal/)からダウンロード可能 - C++, C#, iOS用SDKの3種類 (SDK1.7 時点) ※ 各コンソール向けSDKは別途リクエストが必要 #UE4 | @UNREALENGINE
SDK について SDK はdll (C++) に加えてサンプルアプリケーションを含む #UE4 | @UNREALENGINE
SDK について EOS SDKの設定方法からサンプルアプリケーションの実行までの手順の解説動画 https://youtu.be/NOoLPGENwrg #UE4 | @UNREALENGINE
SDK を呼び出す Client SDKを呼び出す際、必ずClient ID/Secretを設定する必要がある - DevPortalからClient IDの発行が可能 - Roleによって、権限が異なり、同じAPI でも出来ることが変わる場合がある #UE4 | @UNREALENGINE Client Role 権限範囲 Game Client ローカルにログインしているユーザとしてのみ 振る舞うことが可能 Game Server ログイン不要で全ユーザの データにアクセス可能 ※Dedicated サーバでの利用を推奨
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は、様々なアカウントでの認証に対応 #UE4 | @UNREALENGINE - Epic Games アカウントでの認証 - 外部アカウントでの認証 (Steam, etc)
認証の流れ 外部Identity Provider (Epic, Steam, etc) 2. ユーザ認証 SDK #UE4 | @UNREALENGINE EOS Endpoint 1. 認証情報を提供 EOS 認証/認可 サービス 3. EOSアカウント 情報とMapping EOS User サービス
認証に必要な設定 DevPortal上で、各Identity Providerの設定を行う必要がある - Epic Games アカウント - Epic Account Services - 外部アカウント - それぞれのIdentity Providerで必要になるCredential/URL等の設定 #UE4 | @UNREALENGINE
ユーザ認証補足 EOSでは各アカウントの情報は、製品 (Product) × ユーザー単位で割り当てられ る 製品ユーザーID(Product User ID) で管理される ゲームA Epic Games アカウント で認証 アカウントID: Terauchi ン イ グ ロ ロ - Product User ID: ABCD ゲームB グ イ ン - Product User ID: 1234 #UE4 | @UNREALENGINE
ユーザ認証 Auth Interface - Epic Games アカウントを利用する場合 - EOS_Auth_Login() Connect Interface - Epic Games アカウント以外のアカウント (Steam 等)を利用する場合 - #UE4 | @UNREALENGINE EOS_Connect_Login()
外部アカウントの紐付け Connect Interface - 製品ユーザー ID の新規発行 - EOS_Connect_CreateUser() - 指定した外部アカウントに対応する製品ユーザIDが未作成 (= EOS_Connect_Login() でユーザが見つからなかったとき) に利用 - 既存の製品ユーザーIDへの、外部アカウント紐付け - #UE4 | @UNREALENGINE EOS_Connect_LinkAccount () - 既存の製品ユーザIDに対して、別の外部アカウントを紐付けたい場合に利用 - EOS_Connect_Login() から取得できる Continuance Token を使う
フレンドリスト #UE4 | @UNREALENGINE
フレンドリスト Epic Games アカウントを利用している場合、 そのユーザのフレンドリストを取得可能 ※ SDK1.7時点では、フレンド申請や削除等、フレンド リストを更新するAPIは全て利用不可能となっています フレンドのステータス(ログイン等)が変更され た際に通知を受け取ることが可能です #UE4 | @UNREALENGINE
フレンド操作 Friends Interface - フレンドリストを取得 - EOS_Friends_QueryFriends() - フレンドのステータス変更通知を受け取る - EOS_Friends_AddNotifyFriendsUpdate() #UE4 | @UNREALENGINE
フレンド情報の表示 ゲーム内で実装せずとも、Social Overlayを利 用することで、フレンドリスト及びそのステー タスを確認可能 - #UE4 | @UNREALENGINE Shift + F3 で表示可能
ゲーム内情報 (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体倒 した! ラスボスを倒した! #UE4 | @UNREALENGINE 1分以内に ゴールした! 100万点以上獲得!
ゲーム内実績の設定/解除 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を利 用することで、実績の達成状況を確認可能 - #UE4 | @UNREALENGINE Shift + F3 で表示可能
リーダーボード #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人以上参加してい るセッションがいい #UE4 | @UNREALENGINE Level50以下の人 だけ参加出来るように 制限したい 友達のセッションに参 加したい!
ゲームセッションの登録 ゲームセッションの情報を登録 - ホストのIP等、接続確立に必要な情報 ゲームセッションのステータス (開始前, プレイ中) 検索条件としてのメタデータ情報 (ステージ名, 難易度, etc) オプションとして参加者情報 ※ 検索を可能にするだけであり、実際のゲームセッション管理、参加者の増減、 コネクション確立等はゲーム側でハンドルし、EOS側に反映する必要が有る - セッションに参加する際の手順 - 参加希望者がセッション詳細から接続先を確認 - ゲーム内でコネクション確立 - セッション所有者がセッション情報を更新 #UE4 | @UNREALENGINE
ゲームセッションの表示 同時に複数のゲームセッションに参加可能 参加者がEpic Games アカウントの場合、 プレゼンスにゲームセッションを表示可能 (最初の1つのみ) - Social Overlay のプレゼンス表示から、 セッションへの招待/参加等が可能 #UE4 | @UNREALENGINE
ゲームセッションの検索 Session ID による検索 - 既にIDを知っている場合の検索方法 - 招待を受けている場合、プレゼンス情報を利用する場合など 製品ユーザID による検索 - 製品ユーザID を指定し、そのユーザが参加しているゲームセッションを検索 - フレンドのゲームセッションを探したい場合など 属性値による検索 - ゲームセッションに設定されている属性値を使って検索 - ランダムに参加するセッションを検索したい場合 -| @UNREALENGINE #UE4
属性値による検索 各ゲームセッションが持つ属性情報を元に、条件検索が可能 - 各属性値に対してフィルタ条件を設定可能 (組み合わせ検索可能) - 数値属性 : =, ≠ , <, >, ≦, ≧ 文字列属性 : セミコロン区切りで指定した、いずれかの文字列を含む 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() - #UE4 | @UNREALENGINE EOS_Sessions_CreateSessionSearch() で検索条件を指定しておく - EOS_SessionSearch_SetSessionId(): Session ID による検索 - EOS_SessionSearch_SetTargetUserId(): 製品ユーザID による検索 - EOS_SessionSearch_SetParameter(): 属性値による検索
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() - #UE4 | @UNREALENGINE EOS_Lobby_CreateLobbySearch() で検索条件を指定しておく - EOS_LobbySearch_SetLobbyId(): Session ID による検索 - EOS_LobbySearch_SetTargetUserId(): 製品ユーザID による検索 - EOS_LobbySearch_SetParameter(): 属性値による検索
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
ゲームプレイ統計情報の送信 ゲームのプレイ状況を送信することで、 ゲーム開始 or 終了 #UE4 | @UNREALENGINE DevPortal上から統計情報として確認可能 - 現在の同時接続数 - 過去のプレイヤー数の記録 - ユーザのリテンション状況 - etc.
ゲームプレイ統計情報の送信 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 #UE4 | @UNREALENGINE