Epic Online Services でできること 【UNREAL FEST EXTREME 2020 SUMMER】

22K 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

profile-image

Unreal Engineを開発・提供しているエピック ゲームズ ジャパンによる公式アカウントです。 勉強会や配信などで行った講演資料を公開しています。 公式サイトはこちら https://www.unrealengine.com/ja/

シェア

またはPlayer版

埋め込む »CMSなどでJSが使えない場合

関連スライド

各ページのテキスト
1.

Epic Online Services でできること Epic Games Japan Software Engineer, Developer Relations 寺内 大起

2.

はじめに Epic Games は全てのゲーム開発者が利用可能なプラットフォームフリーなオン ラインサービスとして Epic Online Services (EOS)を提供します。 EOSはあらゆるメジャーなプラットフォームから利用可能な様々な機能を持って おり、どのようなエンジン/ストアとも統合可能です。 本日は、EOSが提供する機能の説明及びSampleを用いて実際の動作をご紹介させ ていただきます。 #UE4 | @UNREALENGINE

3.

今日のゴール EOSを使うと 何ができて、何ができないのか がイメージできる #UE4 | @UNREALENGINE

4.

目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE

5.

目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE

6.

EOSとは https://dev.epicgames.com/ja/services #UE4 | @UNREALENGINE

7.

目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE

8.

SDK について DevPortal(https://dev.epicgames.com/portal/)からダウンロード可能 - C++, C#, iOS用SDKの3種類 (SDK1.7 時点) ※ 各コンソール向けSDKは別途リクエストが必要 #UE4 | @UNREALENGINE

9.

SDK について SDK はdll (C++) に加えてサンプルアプリケーションを含む #UE4 | @UNREALENGINE

10.

SDK について EOS SDKの設定方法からサンプルアプリケーションの実行までの手順の解説動画 https://youtu.be/NOoLPGENwrg #UE4 | @UNREALENGINE

11.

SDK を呼び出す Client SDKを呼び出す際、必ずClient ID/Secretを設定する必要がある - DevPortalからClient IDの発行が可能 - Roleによって、権限が異なり、同じAPI でも出来ることが変わる場合がある #UE4 | @UNREALENGINE Client Role 権限範囲 Game Client ローカルにログインしているユーザとしてのみ 振る舞うことが可能 Game Server ログイン不要で全ユーザの データにアクセス可能 ※Dedicated サーバでの利用を推奨

12.

EOS SDK の補足 Unreal Engine との連携は現状ありません - 他のゲームエンジンから利用するのと同様に、SDKをご利用ください 他プラットフォームサービスとの連携はアカウント認証のみ - 実績/ゲームセッション等、他プラットフォームの類似サービスもあります が、それらと連動はせず、独立して動作します #UE4 | @UNREALENGINE

13.

目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE

14.

提供するサービス群 Epic Online Services ドキュメント (https://dev.epicgames.com/docs/services/ja/) #UE4 | @UNREALENGINE

15.

提供するサービス群 - で、具体的に何ができるの? #UE4 | @UNREALENGINE

16.

アカウントの認証/紐付け #UE4 | @UNREALENGINE

17.

ユーザ認証 オンラインサービスを利用する時、多くの場合 利用者のアカウントを認証する必要がある EOSは、様々なアカウントでの認証に対応 #UE4 | @UNREALENGINE - Epic Games アカウントでの認証 - 外部アカウントでの認証 (Steam, etc)

18.

認証の流れ 外部Identity Provider (Epic, Steam, etc) 2. ユーザ認証 SDK #UE4 | @UNREALENGINE EOS Endpoint 1. 認証情報を提供 EOS 認証/認可 サービス 3. EOSアカウント 情報とMapping EOS User サービス

19.

認証に必要な設定 DevPortal上で、各Identity Providerの設定を行う必要がある - Epic Games アカウント - Epic Account Services - 外部アカウント - それぞれのIdentity Providerで必要になるCredential/URL等の設定 #UE4 | @UNREALENGINE

20.

ユーザ認証補足 EOSでは各アカウントの情報は、製品 (Product) × ユーザー単位で割り当てられ る 製品ユーザーID(Product User ID) で管理される ゲームA Epic Games アカウント で認証 アカウントID: Terauchi ン イ グ ロ ロ - Product User ID: ABCD ゲームB グ イ ン - Product User ID: 1234 #UE4 | @UNREALENGINE

21.

ユーザ認証 Auth Interface - Epic Games アカウントを利用する場合 - EOS_Auth_Login() Connect Interface - Epic Games アカウント以外のアカウント (Steam 等)を利用する場合 - #UE4 | @UNREALENGINE EOS_Connect_Login()

22.

外部アカウントの紐付け Connect Interface - 製品ユーザー ID の新規発行 - EOS_Connect_CreateUser() - 指定した外部アカウントに対応する製品ユーザIDが未作成 (= EOS_Connect_Login() でユーザが見つからなかったとき) に利用 - 既存の製品ユーザーIDへの、外部アカウント紐付け - #UE4 | @UNREALENGINE EOS_Connect_LinkAccount () - 既存の製品ユーザIDに対して、別の外部アカウントを紐付けたい場合に利用 - EOS_Connect_Login() から取得できる Continuance Token を使う

23.

フレンドリスト #UE4 | @UNREALENGINE

24.

フレンドリスト Epic Games アカウントを利用している場合、 そのユーザのフレンドリストを取得可能 ※ SDK1.7時点では、フレンド申請や削除等、フレンド リストを更新するAPIは全て利用不可能となっています フレンドのステータス(ログイン等)が変更され た際に通知を受け取ることが可能です #UE4 | @UNREALENGINE

25.

フレンド操作 Friends Interface - フレンドリストを取得 - EOS_Friends_QueryFriends() - フレンドのステータス変更通知を受け取る - EOS_Friends_AddNotifyFriendsUpdate() #UE4 | @UNREALENGINE

26.

フレンド情報の表示 ゲーム内で実装せずとも、Social Overlayを利 用することで、フレンドリスト及びそのステー タスを確認可能 - #UE4 | @UNREALENGINE Shift + F3 で表示可能

27.

ゲーム内情報 (Stats) の集計 #UE4 | @UNREALENGINE

28.

ゲーム内情報 (Stats)の集計 DevPortal上でゲーム内情報を定義し、ゲームか ら送信することで自動的な集計を可能とする - 敵を倒した数 - ゲーム内で死んだ回数 - ミニゲームの最高得点 - ヘッドショット回数 - etc. 1ゲーム当たり最大500種類のStatsを定義可能 各ユーザ単位で集計される #UE4 | @UNREALENGINE

29.

集計出来るデータ 数値データのみ集計可能 - 文字列等は未対応 クエリ時に期間指定が可能で、特定の期間内の集計値を後から取得可能 サポートしている集計方法は以下の4種類 - SUM : 合計値 (敵を倒した数, 強制切断回数, etc) MAX : 最大値 (最高得点, etc) MIN : 最小値 (最速ラップタイム, etc) LATEST : 最新値 (最後に利用した装備セット, etc) #UE4 | @UNREALENGINE

30.

ゲーム内情報 (Stats)の集計 Stats Interface - Statsの送信 - EOS_Stats_IngestStat() ユーザの特定期間のStatsを取得 - EOS_Stats_QueryStats() Game Server権限ならば、全てのユーザのStatsの更新/取得が可能 eg. 「イイね!」された数の計測等、他者から実行されたアクションも集計可能 #UE4 | @UNREALENGINE

31.

ゲーム内実績の設定/解除 #UE4 | @UNREALENGINE

32.

ゲーム内実績の設定/解除 ドラゴンを30体倒 した! ラスボスを倒した! #UE4 | @UNREALENGINE 1分以内に ゴールした! 100万点以上獲得!

33.

ゲーム内実績の設定/解除 DevPortalで実績 (Achievement)を設定可能 - Stats を元にして自動的に実績解除が可能 eg. kill_count_dragon が 10以上なら、 実績“Dragon Slayer”を解除 - 複数のStatsを取得条件に設定することも可能 - Stats を使わない実績を作りたい場合はダミーのStatsを用意する必要有り - 別途 EOS_Achievements_UnlockAchievements() を使って解除する #UE4 | @UNREALENGINE

34.

ゲーム内実績の設定/解除 Achievement Interface - 実績の定義を取得する - 実績の進捗状況を取得する - - EOS_Achievements_QueryDefinitions() EOS_Achievements_QueryPlayerAchievements() 実績を強制的に解除する (Game Serverのみ利用可能) - EOS_Achievements_UnlockAchievements() #UE4 | @UNREALENGINE

35.

実績の表示 ゲーム内で実装せずとも、Social Overlayを利 用することで、実績の達成状況を確認可能 - #UE4 | @UNREALENGINE Shift + F3 で表示可能

36.

リーダーボード #UE4 | @UNREALENGINE

37.

リーダーボード Statsを元にしたリーダーボードを作成可能 - 各コースの世界最速ランキング - 世界最高スコアランキング - フレンド間でのクリアタイムランキング - etc. グローバルなリーダーボードと ユーザを指定したリーダーボードがある #UE4 | @UNREALENGINE

38.

グローバルなリーダーボード 全プレイヤーを対象に、上位1000人までを管理するリーダーボード 事前にDevPortal で定義を作成しておく必要あり - 最大50個作成可能 - Stats を指定すると、それを元に自動的にランキングが集計される - Stats の集計方法によってランキングの付け方が自動的に決定される eg. “stage_1_clear_time (MIN)” の昇順ランキング #UE4 | @UNREALENGINE

39.

ユーザを指定したリーダーボード 指定したユーザのStatsを読み取って、リーダーボードの様に見せかけて返す - 製品ユーザーID 及び Statsを指定してランキングを取得可能 - 同時に指定可能なユーザ数は 32人 まで - フレンド間のランキングなど、特定のユーザ間でのランキングに利用できる #UE4 | @UNREALENGINE

40.

リーダーボードの取得 Leaderboards Interface - グローバルなリーダーボード - EOS_Leaderboards_QueryLeaderboardDefinitions() - - EOS_Leaderboards_QueryLeaderboardRanks() - - 定義の取得 ランキングの取得 ユーザ指定したリーダーボード - EOS_Leaderboards_QueryLeaderboardUserScores() - #UE4 | @UNREALENGINE ユーザ間でのランキングの取得

41.

ゲームセッションの検索 #UE4 | @UNREALENGINE

42.

ゲームセッション ここで想定しているゲームセッションとは - 各ゲームにおける1プレイ単位 - 比較的短時間で終了する (数分 ~ 数時間) - 開始と終了が明確に存在している - オンラインでの複数人プレイ シューターゲームの1マッチ、レースゲームでの1レース等 #UE4 | @UNREALENGINE

43.

ゲームセッションの検索 古城のステージ で戦いたい! 10人以上参加してい るセッションがいい #UE4 | @UNREALENGINE Level50以下の人 だけ参加出来るように 制限したい 友達のセッションに参 加したい!

44.

ゲームセッションの登録 ゲームセッションの情報を登録 - ホストのIP等、接続確立に必要な情報 ゲームセッションのステータス (開始前, プレイ中) 検索条件としてのメタデータ情報 (ステージ名, 難易度, etc) オプションとして参加者情報 ※ 検索を可能にするだけであり、実際のゲームセッション管理、参加者の増減、 コネクション確立等はゲーム側でハンドルし、EOS側に反映する必要が有る - セッションに参加する際の手順 - 参加希望者がセッション詳細から接続先を確認 - ゲーム内でコネクション確立 - セッション所有者がセッション情報を更新 #UE4 | @UNREALENGINE

45.

ゲームセッションの表示 同時に複数のゲームセッションに参加可能 参加者がEpic Games アカウントの場合、 プレゼンスにゲームセッションを表示可能 (最初の1つのみ) - Social Overlay のプレゼンス表示から、 セッションへの招待/参加等が可能 #UE4 | @UNREALENGINE

46.

ゲームセッションの検索 Session ID による検索 - 既にIDを知っている場合の検索方法 - 招待を受けている場合、プレゼンス情報を利用する場合など 製品ユーザID による検索 - 製品ユーザID を指定し、そのユーザが参加しているゲームセッションを検索 - フレンドのゲームセッションを探したい場合など 属性値による検索 - ゲームセッションに設定されている属性値を使って検索 - ランダムに参加するセッションを検索したい場合 -| @UNREALENGINE #UE4

47.

属性値による検索 各ゲームセッションが持つ属性情報を元に、条件検索が可能 - 各属性値に対してフィルタ条件を設定可能 (組み合わせ検索可能) - 数値属性 : =, ≠ , <, >, ≦, ≧ 文字列属性 : セミコロン区切りで指定した、いずれかの文字列を含む or どれも含まない - 数値属性を利用してソート可能 - 基準数値を指定し、そこからの絶対距離でソート可能 ステージ5 難易度はHARD 参加者の平均レベ ルで昇順ソート #UE4 | @UNREALENGINE

48.

ゲームセッションの登録 Sessions Interface - セッションの作成/更新/破棄 (Game Serverのみ利用可能) - EOS_Sessions_CreateSessionModification() - EOS_Sessions_UpdateSession() - EOS_Sessions_DestroySession() - メンバー管理 (Sessionの所有者が実行する) - EOS_Sessions_RegisterPlayers() - EOS_Sessions_UnregisterPlayers() #UE4 | @UNREALENGINE

49.

ゲームセッションの検索 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(): 属性値による検索

50.

Sessions Interfaceの注意点 基本思想は、Dedicatedサーバなどのセッション集中管理システムが存在し、 Sessions Interfaceを呼び出す前提 - ホスト (セッション作成者)のみがセッションの状態を更新可能 - ネットワーク切断時などのホストの移譲などはサポートされていない - P2P接続で管理されるセッションでの利用には若干不向き - エラーハンドリング等が複雑になる #UE4 | @UNREALENGINE

51.

ロビー管理 #UE4 | @UNREALENGINE

52.

ロビーとは ゲームセッションより長期的なグループ - 他のユーザーとのチャット - 他のプレイヤーの参加を待機 - チームの編成 - ゲーム前のオプション選択 - etc 複数のゲームセッションを繰り返していく グループ #UE4 | @UNREALENGINE

53.

ロビー バックエンド的にはゲームセッションと共有しているが、細かい違いが有る - Game Client Role でロビーが作成できる - 所有者を移譲可能 - 現所有者がLeaveした場合、自動的に新しい所有者が決定される - 参加者管理は各メンバーのJoin/Leave or Kickoutで行う - ゲームセッションの場合、所有者が責任を持って更新する必要がある - 参加者/所有者に変更があった場合、全参加者に通知が飛ぶ #UE4 | @UNREALENGINE

54.

ロビー管理 Lobby Interface - ロビーの作成/更新/破棄 - EOS_Lobby_CreateSessionModification() - EOS_Lobby_UpdateSession() - EOS_Lobby_DestroySession() - ロビーへの参加/離脱 - EOS_Lobby_JoinLobby() - EOS_Lobby_LeaveLobby() #UE4 | @UNREALENGINE

55.

ロビー管理 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(): 属性値による検索

56.

P2P接続 #UE4 | @UNREALENGINE

57.

P2P接続 製品ユーザーID で指定した相手とP2P 接続の 確立、データの送受信が可能 - STUNによるNAT越えをサポート - 対称型NAT等でNAT越えに失敗した場合、 自動的にTURNサーバによるパケットリ レーに切り替えるオプションもある - パケットの到達/順序保証は、オプション で選択可能 #UE4 | @UNREALENGINE

58.

P2P接続 NAT P2P Interface - パケットの送信 - EOS_P2P_SendPacket() - - 接続が未確立の場合、コネクションリクエストが相手に通知される コネクションリクエストの承認 - EOS_P2P_AcceptConnection() or EOS_P2P_SendPacket() - リクエストの通知は EOS_P2P_AddNotifyPeerConnectionRequest() で受付ける - コネクションの破棄 - EOS_P2P_CloseConnection() #UE4 | @UNREALENGINE

59.

ユーザごとのデータストレージ #UE4 | @UNREALENGINE

60.

ユーザごとのデータストレージ ゲームごとのユーザー固有のデータをオンライ ン上に保存可能 eg. デバイス間でのセーブデータ共有等 - 暗号化をサポート - 200MBのファイルまでアップロード可能 - 1人あたり最大400MBまで利用可能 現時点では、アップロードしたファイルを他のユーザと 共有することは出来ません #UE4 | @UNREALENGINE

61.

ユーザごとのデータアップロード Player Data Storage Interface - ファイル情報の取得 - - EOS_PlayerDataStorage_QueryFileList() - EOS_PlayerDataStorage_QueryFile() ファイルの読み出し/書き込み/削除 - EOS_PlayerDataStorage_ReadFile() - EOS_PlayerDataStorage_WriteFile() - EOS_PlayerDataStorage_DeleteFile() #UE4 | @UNREALENGINE

62.

ゲームプレイ統計情報の送信 #UE4 | @UNREALENGINE

63.

ゲームプレイ統計情報の送信 ゲームのプレイ状況を送信することで、 ゲーム開始 or 終了 #UE4 | @UNREALENGINE DevPortal上から統計情報として確認可能 - 現在の同時接続数 - 過去のプレイヤー数の記録 - ユーザのリテンション状況 - etc.

64.

ゲームプレイ統計情報の送信 Metrics Interface - プレイセッションのレポート (リテンション状況の集計に使用される) - - EOS_Metrics_BeginPlayerSession() - EOS_Metrics_EndPlayerSession() 同時接続数の収集 - オンラインのマシンでSDK の初期化を行うと自動的に集計される #UE4 | @UNREALENGINE

65.

ゲームプレイ統計情報の送信 実際のDevPortalの画面 #UE4 | @UNREALENGINE

66.

制限事項等 #UE4 | @UNREALENGINE

67.

サービスの使用上の制限事項 各サービスごとの詳細は下記を参照 https://dev.epicgames.com/docs/services/ja/DevPortal/UsageLimitations/index.html #UE4 | @UNREALENGINE

68.

目次 ● EOSとは ● SDKについて ● 具体的にできること ● まとめ #UE4 | @UNREALENGINE

69.

まとめ ● EOSが提供する機能について概要を説明しました ● ● ● ● ● ● ● ● ● ● ● アカウントの認証/紐付け フレンドリスト ゲーム内情報 (Stats) の集計 ゲーム内実績の設定/解除 リーダーボード ゲームセッションの検索 ロビー管理 P2P接続 ユーザごとのデータアップロード ゲームプレイ統計情報の送信 制限事項等 #UE4 | @UNREALENGINE

70.

おわりに Epic Online Services は2020/06に正式サービスインしたばかりのプラット フォームですが、非常に早いサイクルで機能拡張が続けられています。 今後もさらなる機能追加や改善が行われていきますので、ご期待ください。 EOSは永続的に無料ですので、ぜひ皆さん一度触ってみてください! コミュニティへの参加もお待ちしております。 https://eoshelp.epicgames.com/s/?language=en_US #UE4 | @UNREALENGINE

71.

EOF #UE4 | @UNREALENGINE