3.8K Views
May 01, 24
スライド概要
Unreal Engine Meetup in Nagoya Season2 Vol.1にて代表の中村(alwei)が登壇した際に利用したスライドです。
Unreal Engineを使ってオンラインゲームを作ってみよう!
https://anurabless.connpass.com/event/308577/
株式会社Indie-us GamesのDocswell公式アカウントです。
Unreal Engineでオンラインゲーム を作るための技術について Unreal Engine Meetup in Nagoya Season2 Vol.1 Indie-us Games 代表&クリエイター alwei #UENagoya
自己紹介 名前 : alwei X : @aizen76 株式会社Indie-us Games 代表 相変わらずUnreal Engine何でも屋 名古屋名物で好きな食べ物は鶏の手羽先 #UENagoya
宣伝 #UENagoya
TrinityS Steam版、PS4/PS5版発売中! もう少しでSteam&PS4/PS5 クロスプレイ版出ます! Steam PS4/PS5 #UENagoya
UNDEFEATED: Genesis スーパーヒーロー3Dアクションゲーム! 現在も開発中ですのでウィッシュリストお願いします! Steam #UENagoya
本日の話す内容 • ネットワークゲームとオンラインゲームの歴史 • Unreal Engineのネットワーキング • オンラインゲームを作るためのミドルウェア • オンラインゲームを作るために必要なもの • やっぱり必要?運営システムについて • 最難関!クロスプレイ! #UENagoya
ネットワークゲームと オンラインゲームの歴史 #UENagoya
世界最古のネットワークゲーム 1973年、PLATOと呼ばれるコンピューターマシン上で 開発されたEmpireもしくはMaze Warの いずれかが世界最古のネットワークゲームと言われている Empire Maze War #UENagoya
今でも遊べる最古ネットワークゲーム 1975年、TRPGであるDungeon & Dragonsに 影響されてPLATO上で開発されたテキストRPG、 Dungeonをネットワーク化したゲーム、 Multi User Dungeon(通称MUD)が ジャンルとして確立され、有志により なんと今でも遊べる最古のネットワークゲーム MMORPGの始祖とも言われる #UENagoya
最古のリアルタイムネットワークゲーム 1983年、NetwareというOS上にてP2Pで動作する、 リアルタイムネットワーク対戦ゲームがSnipesの登場 この頃にマリオブラザーズといった 有名なアクションゲームも登場した #UENagoya
P2P FPS Doomの誕生 1993年、FPSの元祖とも呼べるDoomが誕生 P2Pを用いてのネットワーキングなどの技術を確立し、 現代でも確固たる地位を築いている オリジナルはMS-DOS上で動くが、 現代ではありとあらゆるデバイス上に 移植されている #UENagoya
MMORPG Ultima Onlineの登場 1997年、Ultimaシリーズをオンライン化した Ultima Onlineが登場 現代のMMORPGの全てが影響を 受けているゲームであり、 オンラインゲームの金字塔 勿論現在もサービス継続中 #UENagoya
三大FPS Quake、Unreal、Half-Life 1996年、id SoftwareがDoomから派生したQuake 1998年、Epic Gamesが独自開発したUnreal 1998年、ValveがQuakeから独自派生させたHalf-Life 所謂三大FPSが出揃い、マルチプレイネットワークゲームの 基礎技術が確立されたことで、多くのオンラインゲームが 世の中に発売されることになる #UENagoya
ネットワークゲームとオンラインゲーム LAN内やプロセス間通信を使って動作 → ネットワークゲーム NAT(WAN)を越えてインターネットにアクセス → オンラインゲーム 広義ではどちらもネットワークゲームである #UENagoya
Unreal Engineの ネットワーキング #UENagoya
そもそもUnreal Engineって TCP通信?UDP通信? #UENagoya
ベースはUDP通信 UDP通信はTCP通信よりも高速 安定面ではTCPに劣る UEのネットワーキングはUDP通信で実装 TCP通信はUEのTCP通信用クラスを 使って利用すること自体は可能 https://www.cloudflare.com/ja-jp/learning/ddos/glossary/user-datagram-protocol-udp/ #UENagoya
そういえば通信方式は P2P?Client Server? #UENagoya
Unreal EngineはClient Serverモデル よく勘違いされている Peer To Peerモデルは端末同士が直に接続 Client Serverモデルはサーバーが全てを担う クライアントはゲーム再生プレイヤー #UENagoya
Unreal Engineのサーバー サーバーを構築する際に下記の2つから選択 • Listen Server • サーバー自体もクライアントになる • サーバーコストがかからない • Dedicated Server • サーバーは専用に動作する • サーバーを独自に用意する必要あり #UENagoya
どっちが良い? ゲームによる 大規模なゲームならDedicated Server一択 最近はモードによってはListen Serverに 切り替えるゲームも出てきている 一般的にDedicated Serverの方が大変 #UENagoya
最近の傾向 CS機ではListen Serverが多い ユーザーが自分でDedicated Serverを 立てて自由に遊ばせるゲームも増えた サーバーコストがかからないのがGood マインクラフトやパルワールドが人気 #UENagoya
通信プロトコル RPC (Remote Procedure Call) 日本語だと遠隔手続き呼び出し ネットワークの先にある端末の関数を呼び出す機能 あらゆるネットワークゲームにおいて最も重要 #UENagoya
RPCの種類 • Multicast • サーバーからクライアント全てに送信 • 最も基本であり、一番使うRPC • Run on Server • クライアントからサーバーに送信 • クライアントの入力をサーバーへ送る際に使うRPC • Run on Owning Client • サーバーから所有権を持つ端末で実行 • 単体のクライアントで実行する時に使うRPC #UENagoya
Reliability(信頼性) RPCの送信時にそのままだと、 ネットワーク状況によって RPCが呼び出せないことがある ReliableをRPCに設定することで、 呼び出しが完了するまで再送を行い 確実に呼び出すことが可能だが、 ネットワーク負荷は増加するので注意 #UENagoya
Replication(複製) アクターや変数を各端末で複製、同期させる機能 変数の同期はサーバーのみで可能 • Replicated • サーバーから変数をクライアントに同期 • RepNotify • 変数を同期させ、同期したことをクライアントで通知 #UENagoya
アクターの所有権 アクターには所有権があり、 所有権がないアクターのReplicationや RPCの送信はできない 所有権はSpawnした端末が権限を所持し、 サーバーがアクターをSpawnするのが一般的 クライアントでもSpawn自体は可能 #UENagoya
より詳しくは以下のスライドで! https://www.docswell.com/s/alwei/KRW71Z-2022-05-12-152255 #UENagoya
オンラインゲームを 作るためのミドルウェア #UENagoya
なぜミドルウェアを使うのか? オンプレミス(自社システム)で構築は大変 今時はクラウド活用が一般的であり、 専門知識が少なくとも運用が できるようになっている 特にサーバースケーリングは オンプレでもやりたくない #UENagoya
オンラインゲームのミドルウェア 沢山の種類があり、やれることも全然違う 基本的にはリアルタイム用のみを紹介 一部ミドルウェアというよりも プラットフォーム依存のサービスもあり 主にPC、モバイルのみでCS系については ここでは紹介しない #UENagoya
ミドルウェア一覧 • Steamworks • Epic Online Services • Azure PlayFab • AWS GameKit • Photon Cloud • STRIX ENGINE • Diarkis • AccelByte #UENagoya
Steamworks Steamでゲームをリリースするためのフレームワーク オンラインゲームに限らない機能も多い マルチプレイのマッチングメイク 実績、ランキング、クラウドセーブ、 ゲームサーバーホスティングなど オンラインゲーム用の機能も多々 https://partner.steamgames.com #UENagoya
Epic Online Services Epic Games謹製のオンラインサービス あらゆるプラットフォームとのクロスプレイを重視 Fortniteでも実際に運用中 ユーザー認証から運営機能まで 何でもアリな高機能ミドルウェア 完全無料、TrinitySでも利用 https://dev.epicgames.com/ja/services #UENagoya
Azure PlayFab MicrosoftのクラウドサービスでAzure上で動作 プラットフォームのクロスプレイも実は可能 HALO、Minecraft、Robloxなどでも採用 マルチプレイからオンラインサービス に必要な機能はほぼ揃っている ユーザー10万人までは無料 https://azure.microsoft.com/ja-jp/products/playfab #UENagoya
AWS GameKit Amazonが提供するオンラインサービス GameKitはバックエンド機能を中心に提供 世界で一番有名なクラウドサービスAWS上で動作 AWSに慣れた人は使いやすいはず UEとの親和性も高い AWSユーザーなら選択肢に https://aws.amazon.com/jp/gamekit/ #UENagoya
Photon Realtime Exit Gamesが提供し、主にリアルタイムサービス向け 最大の特徴はUEの機能に一切頼らずに実装できること リレーサーバー形式となるのでサーバーの用意いらず リアルタイム性が高い 公式プラグインあり Unityで慣れた人が使いやすいかも https://www.photonengine.com/ja-jp/realtime #UENagoya
STRIX ENGINE Soft Gearが提供する純国産オンラインサービス 国産オンラインゲームBLUE PROTOCOLで採用 大規模に強く、日本なのでサポート対応が早い 価格はかなり高めなので法人向け Strix Cloudと併用すると マッチメイキングなどもできる https://www.strixengine.com/ #UENagoya
Diarkis Diarkisが提供する純国産オンラインサービス 鉄拳8、プロジェクトセカイなどで採用 同じく日本なのでサポート対応が早い なんとサーバーがGo言語で書かれている まだまだ新しいサービス クロスプレイ対応も推されている https://welcome.lp.diarkis.io #UENagoya
AccelByte AccelByteが提供するフルマネージドオンラインサービス 元Epic Gamesバックエンドリーダーが創業 最近海外で採用するゲームが増えている 他サービスよりかなり多機能 一定プレイヤー数、プレイ時間までは 無料で使い続けることができる https://accelbyte.io #UENagoya
ミドルウェア単純比較 機能量 UE対応 学習コスト 価格 サポート クロスプレイ Steamworks ○ × ○ ◎ △ × Epic Online Services ◎ ◎ ○ ◎ ○ ◎ Azure PlayFab ◎ ◎ ○ ○ △ ◎ AWS GameKit △ ○ △ ○ △ △ Photon Realtime △ △ ◎ ○ △ ◎ STRIX ENGINE △ ○ △ △ ◎ ○ Diarkis △ ○ △ △ ◎ ○ AccelByte ◎ ○ △ ○ △ ◎ ※あくまでも主観なので参考程度に #UENagoya
オススメはEOSかPlayFab 総合的に安定してそうなのはEOSかPlayFab SteamだけでよければSteamworksでも十分 これらは価格面の負担がほとんどない Unityを使った人ならPhotonは多いにあり 国産サービス2つはサポートに特化 BtoB向けなので個人ユーザーは向かない #UENagoya
オンラインゲームを 作るために必要なもの #UENagoya
最低限のオンラインゲーム作るためには 特に重要なのがユーザー管理と認証 まずはログイン認証機能が必要 次に大事なのがセッションのマッチメイク ユーザー同士でマッチングさせる必要がある これがないとオンラインゲームとして 成り立たないので最優先 #UENagoya
EOSを使うなら EOSCoreプラグイン(非公式) BPオンリーで簡単に ログイン認証、セッション作成 ネットワーク知識が少なくとも 比較的簡単に実装可能! https://www.unrealengine.com/marketplace/ja/product/eoscore #UENagoya
PlayFabを使うなら PlayFab SDKプラグイン(公式) こちらもBPオンリーで可能 ほぼ全てのAPIが利用可能 ロビー機能を使うことで、 ユーザーマッチングが可能 https://www.unrealengine.com/marketplace/ja/product/playfab-sdk #UENagoya
OnlineSubsystemを使う? Unreal Engineには共通インターフェースとして OnlineSubsystem(OSS)というものがある OSSを使うと共通インターフェースを経由し、 クロスプラットフォーム対応がより楽になる 各種SDKやミドルウェアがこれにラップする形で 機能を提供していることがある #UENagoya
便利だけど注意点もある 詳しい話はこちらのスライドで! https://www.docswell.com/s/alwei/ZDEQQ8-2023-12-15-125152 #UENagoya
他にオンラインゲームで必要なもの • プレイヤーデータ • プレイヤーデータの保存 • 所持品、キャラパラメーター、ゲーム通貨など • マスターデータ • ゲーム側のマスターデータの保存 • ランキングやアイテム、エネミーのパラメーターなど • フレンド、パーティー、ギルド • 友達や知り合いと繋がるようにするため • 招待 • フレンドとゲームがすぐに遊べるようにするため #UENagoya
ミドルウェアに頼ろう! データベース系の機能は自前で実装すると大変 EOSやPlayFabには近い機能が最初から存在する ただし容量制限もあるので注意 更にSQLのようなクエリーはできないので 細かい検索を行うのは難しい #UENagoya
プレイヤーデータ、マスターデータ • EOS • Player Data Storage • Title Data Storage • PlayFab • Player/User Data • Title Data #UENagoya
Jsonとして取得 基本的にデータはJsonとして ファイルを扱うのが楽でよさげ UE5標準の Json Blueprint Utilities プラグインがすぐに使えて便利! #UENagoya
フレンド、招待 • EOS • Friends • SendInvite • PlayFab • Friend List • Invite to Lobby #UENagoya
プラットフォームフレンドではない 注意しなくてはならないのが これらはあくまでゲーム内フレンドを作る機能 パーティ、ギルドなどの実装であればそれもよいが 例えばSteamのフレンドで遊びたい場合、 ミドルウェアを使うと逆に実現できなくなってしまう ミドルウェアによっては対応しているケースもある #UENagoya
OnlineSubsystemのFriends Interface Unreal Engine標準のOnlineSubsystemを 使うことでプラットフォームのフレンド機能を ミドルウェアが対応していれば対応可能 OnlineSubsystemEOS は専用のOSS機能を提供 しているので対応可能 https://docs.unrealengine.com/5.3/ja/online-subsystem-friends-interface-in-unreal-engine/ #UENagoya
やっぱり必要? 運営システムについて #UENagoya
運営システムとは オンラインゲームでは様々なことが発生 その時に運営が介入することで、 様々なイベントや悪質プレイヤー対応を行ったりする そのために必要なものが運営システム! #UENagoya
Web Browser Widget 運営からのお知らせが必要なら Web Brower Widgetを使って告知 勿論Webページは自分で用意し、 メンテナンスする必要あり 挙動がプラットフォームで微妙に 違うことがあるので注意 https://unrealengine.hatenablog.com/entry/2015/05/29/204622 #UENagoya
イベント例 • 特定期間の間だけ、アイテム出現率がアップ! • 特定の時間のみ、強敵が出現する • バトルルールが一定期間のみ変化 • 演出が一部変化する • etc… イベント内容によってやることは変化 #UENagoya
マスターデータの変更 実装は予め入れておき、 マスターデータの修正のみで動作するようにさせる マスターデータの修正を間違えると 大変な問題が発生することがあるので、 事前のデバッグとテストはしっかりとやる #UENagoya
大型アップデートの場合 マスターデータの修正のみでは追いつかないので、 基本的にパッチ配信が必要となる パッチ配信について、プラットフォームごとに 配信のために必要な準備が大きく異なる 日々のイベントとは違う括りで実施するのが良い #UENagoya
通報と制裁(BAN)機能 チート行為や嫌がらせをされた場合、 ユーザーが通報できる機能を用意 悪質と判断した場合には制裁(BAN)を 行うことでゲーム内秩序を保つ #UENagoya
通報と制裁(BAN) • EOS • Reports • Sanctions • PlayFab • Report Player • User Bans #UENagoya
通報がくると… EOSやPlayFabでは通報されたユーザーを確認することが出来る 通報理由や通報回数を 元にそのユーザーへ 制裁(BAN)を行うかを 判断して実行 #UENagoya
制裁後… ユーザーが異議を唱えるために連絡が できるようにしておく必要もある 冤罪でBANしてしまうこともあるので、 実際にBANするかは慎重に #UENagoya
最難関! クロスプレイ! #UENagoya
クロスプレイとは ユーザーがプラットフォームを越えて 一緒に遊べるようにするための仕組み クロスプレイ例 Steam ⇔ Epic Games Store PlayStation ⇔ Xbox iOS ⇔ Android #UENagoya
ユーザーからすれば… 色んなプラットフォームの友達と遊べた方が楽しい! 誘った友達が自分と違うプラットフォームで購入してた 一緒に遊べなくて悲しい… #UENagoya
クロスプレイ実現のためには… 基本的にミドルウェアがなければほぼ不可能 ミドルウェアのサポートがあっても大変… クロスプレイ対応を謳っているミドルウェアでも その難易度は様々 #UENagoya
クロスプレイ 注意点その1 #UENagoya
プラットフォーム間の最適化 プラットフォーム、特にハードウェア条件が 厳しい場合、クロスプレイに差が生まれないように 最適化を丁寧に行う必要がある Steam ⇔ PlayStation 5 ○ Steam ⇔ Xbox Series X ○ Steam ⇔ Switch × Steam ⇔ iOS、Android × #UENagoya
近いプラットフォームに限定する 近年では対応プラットフォームのハードウェア性能が 近いもの同士でクロスプレイ可能にしていることが多い Steam & PS5 & XSX Steam & Switch Steam & EGS & iOS & Android 自身で出したいプラットフォームを中心に選ぶべし #UENagoya
クロスプレイ 注意点その2 #UENagoya
ネイティブクロス ネイティブクロスとは 表向きにプラットフォーム機能だけで、 クロスプレイを実現させているようにみせる 実際はミドルウェアが自動的にIDを作成し、 ネイティブアカウントと紐付けている メリットはユーザーに手間をかけさせる必要がない #UENagoya
非ネイティブクロス ミドルウェアサービスのIDとパスワードをユーザーが入力 フレンドリストやブロックリストをプラットフォームを 跨いで管理できるようになるためクロスプレイ時の都合が良い 気軽に友人と繋がりやすくなるが、 ユーザーが別途サービスのIDを入力するのが手間 #UENagoya
どちらを選ぶべきか 少しでもユーザーが入力する手間を減らさせたい場合 ネイティブクロスを選択 クロスプレイ対応度を上げたいのであれば 非ネイティブクロスを選択 ゲームの性質によっても変わってくるので慎重に選ぶべし #UENagoya
クロスプレイ 注意点その3 #UENagoya
プラットフォームの制約が厳しい プラットフォームによってクロスプレイを行う場合に 一部厳しい制約(ルール)が設けられていることがある 特にCSゲーム機のプラットフォームは厳しい 逆にPCのプラットフォームはほとんど制約がない #UENagoya
クロスに条件がつきやすい内容 • クロスセーブデータ • プラットフォームを跨いでのセーブデータ共有 • クロスコンテンツ • プラットフォームを跨いで有料コンテンツを共有 • クロス通貨 • プラットフォームを跨いで有料のゲーム内通貨などを共有 ※名称は全て正式なものではありません #UENagoya
クロスプレイだけでも… フレンドの扱いが変わったり、 特定プラットフォームとクロスプレイする場合のみ 仕様が変わったりすることも クロスプレイを実現させているゲームでも 細かくみていると様々な制限があることがわかる #UENagoya
クロスプレイ 注意点その4 #UENagoya
エンジン改造がほぼ必須 クロスプレイを実現するためには細かな調整が必要 そのため各プラットフォームに合わせたカスタマイズが 必須となってくるためエンジンを触ることが多い 古いUEだとクロスプレイに対応されていない仕様も 出てきたりするので、自前で実装となる #UENagoya
OnlineSubsystemの改造 TrinitySでは特定プラットフォームにおいて クロスプレイ用のAPIを呼び出すために、 OnlineSubsystemに手を入れて呼び出せるように対応 特にミドルウェアが絡むと厄介なことも多く、 ミドルウェアがしっかりと対応しているかの確認も必要 #UENagoya
クロスプレイ実現までの道程 ゲームが動いていたとしてもやることが多い… そしてプラットフォーム側の制約も沢山あるので、 それらを守りつつゲームを成立させるまで 調整と試行錯誤を繰り返すことになる #UENagoya
難易度めっちゃ高い! #UENagoya
クロスプレイのノウハウ ほとんど見当たらない… #UENagoya
クロスプレイについて お悩みでしたらぜひ Indie-us Gamesまで! #UENagoya
ご清聴いただき ありがとうございました! #UENagoya