More Related Content
Similar to Epic Online Services でできること (11)
More from エピック・ゲームズ・ジャパン Epic Games Japan (20)
Epic Online Services でできること
- 2. #UE4 | @UNREALENGINE
はじめに
Epic Games は全てのゲーム開発者が利用可能なプラットフォームフリーなオン
ラインサービスとして Epic Online Services (EOS)を提供します。
EOSはあらゆるメジャーなプラットフォームから利用可能な様々な機能を持って
おり、どのようなエンジン/ストアとも統合可能です。
本日は、EOSが提供する機能の説明及びSampleを用いて実際の動作をご紹介させ
ていただきます。
- 8. #UE4 | @UNREALENGINE
SDK について
DevPortal(https://dev.epicgames.com/portal/)からダウンロード可能
- C++, C#, iOS用SDKの3種類 (SDK1.7 時点)
※ 各コンソール向けSDKは別途リクエストが必要
- 11. #UE4 | @UNREALENGINE
SDK を呼び出す Client
SDKを呼び出す際、必ずClient ID/Secretを設定する必要がある
- DevPortalからClient IDの発行が可能
- Roleによって、権限が異なり、同じAPI でも出来ることが変わる場合がある
Client Role 権限範囲
Game Client
ローカルにログインしているユーザとしてのみ
振る舞うことが可能
Game Server
ログイン不要で全ユーザの
データにアクセス可能
※Dedicated サーバでの利用を推奨
- 12. #UE4 | @UNREALENGINE
EOS SDK の補足
Unreal Engine との連携は現状ありません
- 他のゲームエンジンから利用するのと同様に、SDKをご利用ください
他プラットフォームサービスとの連携はアカウント認証のみ
- 実績/ゲームセッション等、他プラットフォームの類似サービスもあります
が、それらと連動はせず、独立して動作します
- 21. #UE4 | @UNREALENGINE
ユーザ認証
Auth Interface
- Epic Games アカウントを利用する場合
- EOS_Auth_Login()
Connect Interface
- Epic Games アカウント以外のアカウント (Steam 等)を利用する場合
- EOS_Connect_Login()
- 22. #UE4 | @UNREALENGINE
外部アカウントの紐付け
Connect Interface
- 製品ユーザー ID の新規発行
- EOS_Connect_CreateUser()
- 指定した外部アカウントに対応する製品ユーザIDが未作成
(= EOS_Connect_Login() でユーザが見つからなかったとき) に利用
- 既存の製品ユーザーIDへの、外部アカウント紐付け
- EOS_Connect_LinkAccount ()
- 既存の製品ユーザIDに対して、別の外部アカウントを紐付けたい場合に利用
- EOS_Connect_Login() から取得できる Continuance Token を使う
- 24. #UE4 | @UNREALENGINE
フレンドリスト
Epic Games アカウントを利用している場合、
そのユーザのフレンドリストを取得可能
※ SDK1.7時点では、フレンド申請や削除等、フレンド
リストを更新するAPIは全て利用不可能となっています
フレンドのステータス(ログイン等)が変更され
た際に通知を受け取ることが可能です
- 28. #UE4 | @UNREALENGINE
ゲーム内情報 (Stats)の集計
DevPortal上でゲーム内情報を定義し、ゲームか
ら送信することで自動的な集計を可能とする
- 敵を倒した数
- ゲーム内で死んだ回数
- ミニゲームの最高得点
- ヘッドショット回数
- etc.
1ゲーム当たり最大500種類のStatsを定義可能
各ユーザ単位で集計される
- 29. #UE4 | @UNREALENGINE
集計出来るデータ
数値データのみ集計可能
- 文字列等は未対応
クエリ時に期間指定が可能で、特定の期間内の集計値を後から取得可能
サポートしている集計方法は以下の4種類
- SUM : 合計値 (敵を倒した数, 強制切断回数, etc)
- MAX : 最大値 (最高得点, etc)
- MIN : 最小値 (最速ラップタイム, etc)
- LATEST : 最新値 (最後に利用した装備セット, etc)
- 30. #UE4 | @UNREALENGINE
ゲーム内情報 (Stats)の集計
Stats Interface
- Statsの送信
- EOS_Stats_IngestStat()
- ユーザの特定期間のStatsを取得
- EOS_Stats_QueryStats()
Game Server権限ならば、全てのユーザのStatsの更新/取得が可能
eg. 「イイね!」された数の計測等、他者から実行されたアクションも集計可能
- 33. #UE4 | @UNREALENGINE
ゲーム内実績の設定/解除
DevPortalで実績 (Achievement)を設定可能
- Stats を元にして自動的に実績解除が可能
eg. kill_count_dragon が 10以上なら、 実績“Dragon Slayer”を解除
- 複数のStatsを取得条件に設定することも可能
- Stats を使わない実績を作りたい場合はダミーのStatsを用意する必要有り
- 別途 EOS_Achievements_UnlockAchievements() を使って解除する
- 34. #UE4 | @UNREALENGINE
ゲーム内実績の設定/解除
Achievement Interface
- 実績の定義を取得する
- EOS_Achievements_QueryDefinitions()
- 実績の進捗状況を取得する
- EOS_Achievements_QueryPlayerAchievements()
- 実績を強制的に解除する (Game Serverのみ利用可能)
- EOS_Achievements_UnlockAchievements()
- 40. #UE4 | @UNREALENGINE
リーダーボードの取得
Leaderboards Interface
- グローバルなリーダーボード
- EOS_Leaderboards_QueryLeaderboardDefinitions()
- 定義の取得
- EOS_Leaderboards_QueryLeaderboardRanks()
- ランキングの取得
- ユーザ指定したリーダーボード
- EOS_Leaderboards_QueryLeaderboardUserScores()
- ユーザ間でのランキングの取得
- 44. #UE4 | @UNREALENGINE
ゲームセッションの登録
ゲームセッションの情報を登録
- ホストのIP等、接続確立に必要な情報
- ゲームセッションのステータス (開始前, プレイ中)
- 検索条件としてのメタデータ情報 (ステージ名, 難易度, etc)
- オプションとして参加者情報
※ 検索を可能にするだけであり、実際のゲームセッション管理、参加者の増減、
コネクション確立等はゲーム側でハンドルし、EOS側に反映する必要が有る
- セッションに参加する際の手順
- 参加希望者がセッション詳細から接続先を確認
- ゲーム内でコネクション確立
- セッション所有者がセッション情報を更新
- 46. #UE4 | @UNREALENGINE
ゲームセッションの検索
Session ID による検索
- 既にIDを知っている場合の検索方法
- 招待を受けている場合、プレゼンス情報を利用する場合など
製品ユーザID による検索
- 製品ユーザID を指定し、そのユーザが参加しているゲームセッションを検索
- フレンドのゲームセッションを探したい場合など
属性値による検索
- ゲームセッションに設定されている属性値を使って検索
- ランダムに参加するセッションを検索したい場合
-
- 48. #UE4 | @UNREALENGINE
ゲームセッションの登録
Sessions Interface
- セッションの作成/更新/破棄 (Game Serverのみ利用可能)
- EOS_Sessions_CreateSessionModification()
- EOS_Sessions_UpdateSession()
- EOS_Sessions_DestroySession()
- メンバー管理 (Sessionの所有者が実行する)
- EOS_Sessions_RegisterPlayers()
- EOS_Sessions_UnregisterPlayers()
- 49. #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(): 属性値による検索
- 50. #UE4 | @UNREALENGINE
Sessions Interfaceの注意点
基本思想は、Dedicatedサーバなどのセッション集中管理システムが存在し、
Sessions Interfaceを呼び出す前提
- ホスト (セッション作成者)のみがセッションの状態を更新可能
- ネットワーク切断時などのホストの移譲などはサポートされていない
- P2P接続で管理されるセッションでの利用には若干不向き
- エラーハンドリング等が複雑になる
- 54. #UE4 | @UNREALENGINE
ロビー管理
Lobby Interface
- ロビーの作成/更新/破棄
- EOS_Lobby_CreateSessionModification()
- EOS_Lobby_UpdateSession()
- EOS_Lobby_DestroySession()
- ロビーへの参加/離脱
- EOS_Lobby_JoinLobby()
- EOS_Lobby_LeaveLobby()
- 55. #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(): 属性値による検索
- 57. #UE4 | @UNREALENGINE
P2P接続
製品ユーザーID で指定した相手とP2P 接続の
確立、データの送受信が可能
- STUNによるNAT越えをサポート
- 対称型NAT等でNAT越えに失敗した場合、
自動的にTURNサーバによるパケットリ
レーに切り替えるオプションもある
- パケットの到達/順序保証は、オプション
で選択可能
- 58. #UE4 | @UNREALENGINE
P2P接続
NAT P2P Interface
- パケットの送信
- EOS_P2P_SendPacket()
- 接続が未確立の場合、コネクションリクエストが相手に通知される
- コネクションリクエストの承認
- EOS_P2P_AcceptConnection() or EOS_P2P_SendPacket()
- リクエストの通知は EOS_P2P_AddNotifyPeerConnectionRequest() で受付ける
- コネクションの破棄
- EOS_P2P_CloseConnection()
- 61. #UE4 | @UNREALENGINE
ユーザごとのデータアップロード
Player Data Storage Interface
- ファイル情報の取得
- EOS_PlayerDataStorage_QueryFileList()
- EOS_PlayerDataStorage_QueryFile()
- ファイルの読み出し/書き込み/削除
- EOS_PlayerDataStorage_ReadFile()
- EOS_PlayerDataStorage_WriteFile()
- EOS_PlayerDataStorage_DeleteFile()
- 69. #UE4 | @UNREALENGINE
まとめ
● EOSが提供する機能について概要を説明しました
● アカウントの認証/紐付け
● フレンドリスト
● ゲーム内情報 (Stats) の集計
● ゲーム内実績の設定/解除
● リーダーボード
● ゲームセッションの検索
● ロビー管理
● P2P接続
● ユーザごとのデータアップロード
● ゲームプレイ統計情報の送信
● 制限事項等
- 70. #UE4 | @UNREALENGINE
おわりに
Epic Online Services は2020/06に正式サービスインしたばかりのプラット
フォームですが、非常に早いサイクルで機能拡張が続けられています。
今後もさらなる機能追加や改善が行われていきますので、ご期待ください。
EOSは永続的に無料ですので、ぜひ皆さん一度触ってみてください!
コミュニティへの参加もお待ちしております。
https://eoshelp.epicgames.com/s/?language=en_US