『Faaast Penguin』に学ぶ!クロスプレイ対応とEOS活用のリアル | Unreal Fest Tokyo 2025

1.1K Views

December 08, 25

スライド概要

本講演へのアンケートにご協力をお願い致します:
https://forms.gle/exAwWaLky3ZZ4hYY6

講演動画:
https://youtu.be/i3sKamV2yhY

講演内容:
5プラットフォームに対応した『Faaast Penguin』の事例をもとに、クロスプレイ対応の実装ポイントとEOSの活用法を解説します。プラットフォームを跨いだマッチングやフレンド管理、パーティ機能、クロスセーブ対応など、本タイトルでの実装方法を紹介。さらにAccountServicesとGameServicesの違いを交え、クロスプレイ対応を検討している方に向けて実践的な情報を提供します。


講演者:
馬場 俊行(株式会社ヒストリア)
高柳 俊一(株式会社ヒストリア)

株式会社ヒストリアについてはこちら:
https://historia.co.jp/

Unreal Fest Tokyo 2025公式サイト:
https://www.unrealengine.com/ja/events/unreal-fest-tokyo-2025

profile-image

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

シェア

またはPlayer版

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

ダウンロード

関連スライド

各ページのテキスト
1.

『Faaast Penguin』に学ぶ!クロスプレイ対応とEOS活用のリアル 株式会社ヒストリア エンジニア/レベルデザイナー エンジニア 馬場俊行 高柳俊一 #unrealfest

2.

自己紹介 株式会社ヒストリア エンジニア レベルデザイナー 株式会社ヒストリア エンジニア 馬場 俊行 高柳 俊一 <代表作> ・Caligula Overdose -リードエンジニア ・Caligula2 -リードエンジニア ・ソードアート・オンライン Last Recollection -プラットフォームエンジニア <代表作> ・Caligula2 -エンジニア ・LIVE A LIVE -エンジニア ・Faaast Penguin -サブリードエンジニア ・Faaast Penguin -ディレクター、リードエンジニア 2 #unrealfest

3.

会社紹介 ● Unreal Engine 専門のゲームデベロッパー ● 所属エンジニアは全員クライアントエンジニア 3 #unrealfest

4.

目次 ● Faaast Penguinの紹介 ● クロスプレイについて ● EOS GS と EOS EAS の違い ● 実装について ● 最後に 4 #unrealfest

5.

の紹介 5 #unrealfest

6.

Faaast Penguinの紹介 https://www.youtube.com/watch?v=Dc6K8QFNu98 6 #unrealfest

7.

Faaast Penguinの紹介 7 #unrealfest

8.

Faaast Penguinの紹介 ● 最大40人のアクションレースゲーム ● 基本プレイ無料 ● マルチプラットフォーム Epic Games Store / Steam / Switch / PS5 / Xbox Series X|S ● クロスプレイ対応 ● 12言語対応 ● 初の自社大型パブリッシング 8 #unrealfest

9.

Faaast Penguinの紹介 ● Unreal Engine 5 - クライアント - ゲームサーバー(Dedicated Server) ● Epic Online Services - フレンドリスト・招待 - ロビー機能(パーティー・プライベートルーム) - プラットフォームに依存しないアカウント管理 ● AWS+Amazon GameLift Servers AWS - APIサーバー、各種DB、CDN(チャンクデータのDL元)等 - マッチメイキング(FlexMatch) - Dedicated Server のオートスケーリング - マルチロケーションフリート 9 #unrealfest

10.

Faaast Penguinの紹介 ● Unreal Engine 5 今回はココの話 - クライアント - ゲームサーバー(Dedicated Server) ● Epic Online Services - フレンドリスト・招待 - ロビー機能(パーティー・プライベートルーム) - プラットフォームに依存しないアカウント管理 ● AWS+Amazon GameLift Servers AWS - APIサーバー、各種DB、CDN(チャンクデータのDL元)等 - マッチメイキング(FlexMatch) - Dedicated Server のオートスケーリング - マルチロケーションフリート 10 #unrealfest

11.

ログイン~プレイまでのフロー 11 #unrealfest

12.

パーティを組んでプレイまでのフロー 12 #unrealfest

13.

プライベートマッチで遊ぶフロー 13 #unrealfest

14.

EOSを導入するに至った経緯 14 #unrealfest

15.

EOSを導入するに至った経緯 多人数のオンライン対戦 多くのユーザーを集める必要がある マルチプラットフォーム対応 基本プレイ無料 様々なプラットフォームユーザーを一同に集める必要がある クロスプレイ対応 15 #unrealfest

16.

EOSを導入するに至った経緯 クロスプレイをやるのであれば… プラットフォームに依存せず 友達同士で遊びたい! プレイデータを共有したい! だけど…フレンド管理もアカウント管理も自前で用意するのは大変… しかし、我々には がある…! 16 #unrealfest

17.

EOSとは Epic Online Services(EOS)とは ● ゲームにオンライン機能を追加できる無料サービス ● PC / Console / Mobile 間のクロスプレイに対応 ● 認証、フレンド、実績、クラウドセーブ、マッチメイキングなどを提供 ● Unreal Engine 以外のゲームエンジンでも利用可能 ● 他のプラットフォームアカウントとも連携可能 17 #unrealfest

18.

EOSを導入するに至った経緯 + ● UE5ではEOSのプラグインを有効化すればすぐに使える状態 - UE5との親和性、実装速度が速い ● アカウントサービスの運営を任せられる - 運営コストが抑えられる 18 #unrealfest

19.

EOSを導入するに至った経緯 採用…!! 次に EOSを利用するにあたって 各種機能をどう活用していくか色々と考慮していく必要がある 19 #unrealfest

20.

クロスプレイについて 20 #unrealfest

21.

何を考慮すべきか クロスプレイ対応のために、以下の内容を考慮する必要があった ● マッチング機能 ● パーティ機能 ● フレンド機能 ● プレイデータの扱い ※クロスセーブに対応する場合 これらをどこまで対応するかによって必要になる機能が変わってくる 21 #unrealfest

22.

マッチングについて ● 大前提として、全てのプラットフォームで同一マッチを行いたかった → ただ… 今回は ならプラットフォームに関係なくマッチングを行う事が可能 Amazon GameLift Servers を採用 22 #unrealfest

23.

マッチングについて では ● マッチングルールを細かく簡単に決めたかった - ユーザーごとのリージョンを考慮 - プレイヤースキルによるマッチングレートを考慮 - マッチング時間経過によるマッチングルールの条件緩和 - これらを気軽に変更したい ● オートスケーリングの実装コストを節約したかった 検討した結果 Amazon GameLift Servers を採用 23 #unrealfest

24.

パーティについて パーティを組む方法 ● フレンドリストから招待・参加をする ● パーティ用のIDを利用してパーティに参加する 24 #unrealfest

25.

パーティについて ● フレンドリストから招待・参加をする - 事前にフレンド登録している相手と一緒に遊べる機能 同じプラットフォーム同士であれば、各プラットフォームの機能で完結 25 #unrealfest

26.

パーティについて ● フレンドリストから招待・参加をする プラットフォームを跨ぐ場合は自前のフレンド機能が必要 ならフレンド機能、ソーシャルオーバーレイを利用すれば実現可能 ではパーティプレイで利用 26 #unrealfest

27.

パーティについて ● IDを利用してパーティを組む - フレンド同士でなくとも一緒に遊べる - フレンド機能は不要 - 自前のパーティ機能が必要 IDを入力して参加 tNQpr (ルームIDを発行) IDを入力参加 27 #unrealfest

28.

パーティについて ● IDを利用してパーティを組む のロビー機能を利用すれば実現可能 ではプライベートマッチで利用 28 #unrealfest

29.

フレンド管理について 各プラットフォームごとのサービスでフレンドリストが存在する → Epic Games アカウント のフレンド → Steam アカウント のフレンド → ニンテンドーアカウント のフレンド → Playstation Network のフレンド → Xbox アカウント(Microsoft アカウント)のフレンド 29 #unrealfest

30.

フレンド管理について プラットフォーム関係無いフレンドリストを作成したい場合 以下の機能を用意する必要がある ● ユーザーの検索 ● フレンド登録の招待、受諾 ● ゲームへの招待、受諾 ● パーティ離脱 ● ブロック機能 ● それらを内包したUI などなど… 30 #unrealfest

31.

フレンド管理について これらは、Epic Games アカウントを利用して のフレンド機能を利用すれば実現可能 更に… 既存のゲームで既にフレンドになっているユーザー同士もそのまま一緒に遊べる ※フォートナイトのために作られたサービス フォートナイトユーザーはそのまま利用可能 もちろん、 でも利用 31 #unrealfest

32.

プレイデータの扱い ● ユーザーのプレイデータ(アカウントのデータ) - 入手したアイテム - 購入したクリスタルの個数 - シーズンランク - シーズンパスの進捗状況 などなど まずはこれらのプレイデータをどこに保存するか? 32 #unrealfest

33.

プレイデータの扱い プレイデータの保存先 ● のPlayer Data Storage機能を利用すればデータを保存する事が可能 APIサーバー主導でデータを自由に取り扱いたかったので では独自のAWSサーバーを用意して、プレイデータを保存・管理 33 #unrealfest

34.

プレイデータの扱い 保存したプレイデータをどう管理するか ● クロスプレイ(クロスセーブ)に対応しない場合 各プラットフォームごとのアカウントで管理(ユーザーの特定)を行えばよい → Epic Games アカウント → Steam アカウント → ニンテンドーアカウント → Playstation Network → Xbox アカウント(Microsoft アカウント) 34 #unrealfest

35.

プレイデータの扱い ● クロスセーブに対応しない場合 プラットフォームのアカウントごとでプレイデータを管理する事になるので プレイデータは他のプラットフォームに引き継げない ユーザーにとっては不便… 35 #unrealfest

36.

プレイデータの扱い ● クロスセーブに対応する場合 各プラットフォームを連携させる1つのアカウントが必要になる つまり、プラットフォームに依存しない1つのアカウントが必要 Epic Games アカウント を利用することでクロスセーブを実現できる ではこの管理を採用して、クロスセーブに対応 36 #unrealfest

37.

クロスプレイについてのまとめ では… ● マッチング機能 Amazon GameLift Servers を利用 ● パーティ機能 EOSを利用 ● フレンド機能 EOSを利用 ● プレイデータの扱い EpicGames アカウントを利用 37 #unrealfest

38.

クロスプレイについてのまとめ では… ● マッチング機能 Amazon GameLift Servers を利用 ● パーティ機能 詳しくは… EOSを利用 → EOS Game Services(EOS GS) を利用 ● フレンド機能 詳しくは… EOSを利用 → EOS Epic Account Services(EOS EAS) を利用 ● プレイデータの扱い 詳しくは… EpicGames アカウントを利用 → EOS EAS を利用 38 #unrealfest

39.

EOS GS と EOS EAS の違い 39 #unrealfest

40.

EOS GS と EOS EAS の違い ● Epic Online Services(EOS)には 大きく2つのサービスに分かれる 40 #unrealfest

41.

41 #unrealfest

42.

ユーザーが Epic Games アカウント への 登録を行う必要がある 42 #unrealfest

43.

EOS GS と EOS EAS の違い 今回の話で出てきた各種機能は… ● EOS EAS Epic Games アカウントへの登録が必要な機能 - アカウント管理 - フレンド機能 - ソーシャルオーバーレイ ● EOS GS Epic Games アカウントへの登録が必要でない機能 - パーティを組むためのロビー機能 - マッチメイキング機能(Faaast Penguinでは未使用) - Player Data Storage機能(Faaast Penguinでは未使用) 43 #unrealfest

44.

EOS GS と EOS EAS の違い アカウント登録を必須にした場合 ● メリット - 共通のフレンド機能が使える - プラットフォームに依存しないアカウント管理が可能 - クロスセーブへの対応 ● デメリット - アカウント作成が心理的障壁になる - Steamのレビューなどで低評価に繋がる - 登録のフローが挟むためすぐにプレイできない - ログインできないとプレイできない 44 #unrealfest

45.

EOS GS と EOS EAS の違い 開発当時、 「フォートナイトのフレンドリストが使いたい!」 Epic Games アカウントへのユーザー登録が必須だと判断した 1年運営して分かったのは Faaast Penguinでは、 Epic Games アカウントのフレンドリストは、 ユーザー登録を必須にするほどの恩恵は無かった 45 #unrealfest

46.

EOS GS と EOS EAS の違い 例えば… ● フレンド機能は各プラットフォームごとに限定 ● クロスでパーティを組みたい時はID招待を提供 ● プレイデータは各プラットフォームごとで管理 という仕様にして Epic Games アカウントへの登録は不要という選択肢もあった 46 #unrealfest

47.

EOS GS と EOS EAS の違いのまとめ ● EASの利用は、共通のフレンド機能が使えるなど魅力的な部分がある一方 デメリットの存在は大きい ● 仕様を決めるうえでも、EOS GS と EOS EAS の違いを きちんと把握しておく事が重要 ● その上でEASを使う場合は、Epic Gamesアカウントへの登録を必須にせず ユーザー任意で後から登録できるようにしておく事を推奨したい 47 #unrealfest

48.

実装について 48 #unrealfest

49.

実装について ● UE5.4.1 ● 開発当時:EOS SDK v1.16.3 現在:EOS SDK v1.17.1.3 ( 使用API v1.16.4 ) 49 #unrealfest

50.

実装について ● UE5でEOSを使用する場合の選択肢(EOS SDKの呼び出し方) - OnlineSubSystem EOS - OnlineServices EOS - Fab(当時のマーケットプレイス)にあるプラグイン 各プラットフォーム対応を考慮すると OnlineSubSystem EOS か OnlineServices EOS の2択だった 50 #unrealfest

51.

実装について ● OnlineSubSystem EOSとは - Epicの公式プラグイン - OnlineSubSystem の EOS版 - OnlineSubSystem はUE4時代からあるので実績がある ● OnlineServices EOSとは - Epicの公式プラグイン - OnlineSubSystem を改良した新バージョン OnlineServices の EOS版 - OnlineServices はUE5からの新機能 51 #unrealfest

52.

実装について ● OnlineSubSystem EOS か OnlineServices EOS か 当時、OnlineServices への移行期だったため、ひとまず検証 →EOSの機能が一部未対応だった EGJと相談しつつ検討の結果、OnlineSubSystem EOS を採用 52 #unrealfest

53.

実装について ● OnlineSubSystem EOS か OnlineServices EOS か 今ならどっち?? すぐにリリースするような短期開発であれば、まだ OnlineSubSystem EOS リリースがまだ先で長期的なプロジェクトになりそうなら OnlineServices EOS の採用を検討した方がよさそう 53 #unrealfest

54.

ログインの実装紹介 54 #unrealfest

55.

ログインの実装紹介 ● Epic Games アカウント にログインするための実装が必要 ログインフローはドキュメントを見ながら、 Lyra の CommonUser プラグインを参考に実装 →プロジェクトプラグインなのでほぼそのまま使える ● 初回ログイン成功後、次回起動時はオートログインしたい → キャッシュによるオートログイン機能は OnlineSubSystem EOS 側でサポート CommonUser プラグインを参考にしていれば、呼び出し側の実装も楽 55 #unrealfest

56.

ログインの実装紹介 ● 各プラットフォームごとでサインインの資格情報の型が違うので注意 →Auth インターフェースのリファレンス | Epic Online Services ドキュメンテーション 対応するプラットフォームごとでログインの動作確認が必要 56 #unrealfest

57.

ログインの実装紹介 開発中は、以下の機能を用意していると便利 ● exeファイルからの直接起動でも、ログインしたい - PC版ではプラットフォームを経由しなくてもログインできるようにする →認証の型を強制的に「persistentauth」に変更する ● 初回ログインフローの動作確認をしたい - オートログインを切る機能を実装する →オートログイン無効設定を実装し、iniファイルなどで指定する ● ログを見なくともログインエラーの原因を知りたい -ログインエラー時にエラーコードを表示する →返ってきたエラーの文字列を加工してゲーム内で表示する 57 #unrealfest

58.

OnlineSubsystemEOSでの パーティ機能の実装紹介 58 #unrealfest

59.

OnlineSubsystemとは ● OnlineSubsystemとは様々なオンラインサービスの非同期通信を 処理するよう設計されている、UnrealEngineに搭載されているプラグイン ● 呼び出し側(アプリ側)ではどのPFかを気にせずにInterface経由で処理を 呼び出すことが可能 Game Client Online Subsystem Online Subsystem EOS EOS SDK Online Subsystem PF PF SDK 59 #unrealfest

60.

パーティ機能の実装紹介 ● パーティ機能を実現するためにFaaastPenguinでは OnlineSubsystemのSessionインターフェースを使用 - BPで扱いやすいようにラッパーを作成 ※EOSHelperSubsystemは自作ラッパー ▼Sessionインターフェースの関数 CreateSession ロビー作成 DestroySession ロビー破壊 JoinSession ロビーに入る LeaveSession ロビーから抜ける etc... ※本講演でのパーティ=EOSのロビー機能 60 #unrealfest

61.

パーティ機能の実装紹介 ● OnlineSubsystemは「非同期通信」を取り扱うよう設計されている → 各動作の完了はInterfaceが持つDelegateで受け取る ● ロビー作成, ロビー破壊, ロビー加入, ロビー脱退 等... - 各リクエストの前に「AddOn○○Delegate_Handle()」で登録 - 各リクエスト完了に「ClearOn○○Delegate_Handle()」で解除 ● 招待受け取り, メンバー加入時, ロビー設定更新時 等... - ラッパークラスでのセットアップ時にまとめて登録 - 「AddOn○○Delegate_Handle()」 61 #unrealfest

62.

パーティ機能を扱う際の注意点 ● OnlineSubsystemEOSのSessionインターフェースを使うとき EOS GSには「ロビー」と「セッション」がある - どちらもSessionインターフェースから呼ばれる - CreateSession時のロビー設定で切り替え可能 → FOnlineSessionSettings->bUseLobbiesIfAvailableで設定 OSS OSS EOS Session EOS GS ロビー EOS GS セッション 62 #unrealfest

63.

パーティ機能を扱う際の注意点 ● ロビー ー WebSocketを用いた持続的な接続が有効になる ー ゲームサーバーを介さずに情報のやり取りが可能 ー 最大64人 ー DedicatedServerで使用不可 ー FaaastPenguinではこちらを使用 ● セッション ー 持続的な接続はなく、都度HTTPリクエストが行われる ー 最大1000人 ー DedicatedServerで使用可能 ー FaaastPenguinでは未使用 ※本講演ではパーティ=ロビー 63 #unrealfest

64.

パーティ機能の実装紹介 ● FaaastPenguinでのパーティ(ロビー)について 64 #unrealfest

65.

パーティ機能の実装紹介 ● フレンドを招待するには、自分がロビーに所属している必要がある → ユーザーは常に何かしらのロビーに参加している状態にする ● 起動時 - 「自分のロビーを作成」 ● 招待受理時 - 「自身のロビーを破壊」→「招待を受けたロビーに加入」 ● ロビー脱退時 - 「所属中のロビーから脱退」→「自分のロビーを作成」 65 #unrealfest

66.

パーティ機能の実装紹介 ● プライベートマッチ用の実装方法 66 #unrealfest

67.

パーティ機能の実装紹介 ● ホスト - 公開人数を40人、招待を無効にしたロビーを作成 - EOSのロビーIDをFaaastPenguinのバックエンドに登録 - バックエンドで5桁のIDを発行して紐付け ● ゲスト - 5桁のIDに紐づいたEOSのロビーIDをバックエンドから取得 - EOSのロビーIDを使ってロビーを検索して見つかったロビーに参加 67 #unrealfest

68.

パーティ機能の実装紹介 ● ロビーIDからのロビー加入について FString型 セッションID Session->CreateSessionIdFromString()で変換 FUniqueNetIdPtr型 セッションID Session->FindSessionById()でロビーを検索 FOnlineSessionSearchResult型 ロビー検索結果 Session->JoinSession()でロビーに参加をリクエスト ロビー加入 68 #unrealfest

69.

パーティ機能の実装紹介 CreateSessionの実装例 69 #unrealfest

70.

パーティ機能の実装紹介 CreateSession完了時の実装例 70 #unrealfest

71.

パーティ機能の実装紹介 コールバックの初期セットアップの実装例 71 #unrealfest

72.

OnlineSubsystemEOSでの実装紹介 ● プラットフォーム専用対応について ー プラットフォームによってはEOSではなく、プラットフォーム機能からの招待にも 対応する必要があるので、実装時に考慮する必要がある - IOnlineSubsystem::GetByPlatform() でプラットフォーム側の OnlineSubsystem の インターフェースが取得可能 - EOSでの CreateSession 完了時には、本来のBP用 Delegate は完了させず プラットフォームの CreateSession を呼び出し、それらが完了した後に 本来のBP用 Delegate を完了させる 72 #unrealfest

73.

OnlineSubsystemEOSでの実装紹介 エンジン側を変更して対応した代表的なもの ● プラットフォームのログイン時の認証の型設定 ● UE5.3時点で足りていなかった機能の実装 ● EOSオーバーレイの言語切り替え FUserManagerEOS::Init()でUIの言語を変更 EOS_Platform_SetOverrideLocaleCode を直接呼び出し 想像以上にエンジン側に変更を入れる必要がなかった 73 #unrealfest

74.

最後に ● EOSを採用したおかげで、大幅な実装工数を削減する事ができた とくにアカウント管理など各種サービスを一から構築するのは難しい おおよそ2カ月ほどでこれらを実装する事ができた 一から作るとなると半年以上はかかるはず… ● GSとEASの違いをきちんと把握した上で プランナーと仕様を切っていくのが重要! 74 #unrealfest

75.

宣伝 https://historia.co.jp/enterprise/soundxr/ 75 #unrealfest

76.

宣伝 https://faaast-penguin.com/ja/ 76 #unrealfest

77.

ご清聴ありがとうございました 77 #unrealfest