『地球防衛軍6』のオンラインプレイに採用された「Epic Online Services」。たった1か月で完了した内製エンジンへの導入について開発者が語る【EOS Deep Dive 2023】

2023.12.27
注目記事ゲームづくりの知識しくみをつくるゲームの舞台裏講演レポートツール紹介ネットワークプログラム
この記事をシェア!
twitter facebook line B!
twitter facebook line B!

エピック ゲームズ ジャパンが主催する勉強会「EOS Deep Dive 2023」が、2023年12月14日(木)に開催されました。

「『地球防衛軍6』におけるEOS導入と実装事例」と題した講演では、サンドロット エンジニア 堀内 康寛氏、ディレクター・チーフエンジニア 野口 俊雄氏が登壇。内製ゲームエンジンで開発された本作にEpic Online Servicesを組み込むノウハウが解説された本講演をレポートします。

TEXT / rita

EDIT / 神谷 優斗

目次

ロビーを使ったマッチングを行う『地球防衛軍6』

地球防衛軍シリーズは、2003年に「SIMPLE2000」シリーズの作品としてPS2向けに発表されて以来、20年にわたって展開が続く3Dアクションシューティングゲームです。

本講演で取り上げられた『地球防衛軍6』は前作から5年ぶりとなる新作で、2023年12月時点で39万本を販売しています。

本作は、シングルプレイと同じステージを複数人で協力して攻略するオンライン協力プレイに対応しています。

協力プレイを行うには、ロビーを作成して参加者を集めるか、ロビー画面から参加したいロビーを選択します。

ゲームの性質上、自動ではなくマニュアル方式のマッチング仕様を採用している

独自フレームワークでの開発にEOSを選んだ理由とは

本タイトルは、前作までの資産を引き継ぎ、PS4をターゲットとして開発をスタートしました。

しかし、開発途中で後継機となるPS5が発売されたことで「PS4・PS5の両対応(いわゆる縦マルチ)にしたい」「ネットワークプレイもクロスマッチングしたい」という要求が発生しました。

地球防衛軍シリーズは独自のフレームワークで開発されており、通信処理も独自に実装されていました。異なるハード間での処理共通化やマッチングを検討した結果、現状のシステムでは対応不可能であると判断されました。

そこで、従来のオンライン処理に代わる手段を検討。その結果、Epic Gamesが提供するオンラインゲーム構築用のソリューションEpic Online ServicesEOS)」を採用しました。

EOSは、アンリアルエンジンに限らずさまざまな環境で利用できるため、本作のような独自のフレームワークをベースにした開発であっても導入することが可能です。

EOSの「ロビー」機能と「P2P」機能を活用

EOSでは、実績やリーダーボードなどの機能個別の「インターフェース」として提供されています。

本作で利用したインターフェースは、基本機能にあたる「Auth(認証)」「Connect(接続)」のほか、「Lobby」「P2P」の4つです。

EOSを本作に導入する作業は、Lobbyを使ったゲーム内ロビー機能10日ほど、P2Pを使ったゲームパート20日ほどで、合計1ヶ月で完了したそうです。

インタフェース経由でAPIを呼び出して結果をコールバックで受け取る構成で扱いやすく、少ないコストで実装できたと堀内氏は語ります。

リリース後、ピーク時には10万ユーザーからの同時アクセスがありましたが、サーバーはまったく問題が起きなかったそう。さすがは『Fortnite』の接続をさばききるサーバーソリューションだ、と堀内氏はEOSを称賛しました。

「属性」を駆使した柔軟なロビー機能の実装

ここからは、具体的な実装内容が解説されました。

まずは、Lobbyインターフェースを用いたロビー機能についてです。

本作のマッチングでは、マッチを開始するプレイヤーは名前参加条件を設定してロビーを作成。マッチに参加するプレイヤーは名前や条件を基にロビーを検索します。

EOSのLobbyは、作成するロビーに対して任意の属性を付与する機能を備えています。

属性は文字列・整数値・実数値・bool値のいずれかの値を持ち、検索の条件として使用できます

属性のソート検索によって実現した機能

検索結果は、任意の属性が持つ値をソートした順番に取得できます。

本作では、新しく作成されたロビーを優先的に表示するため、ロビーの作成時間を属性として付与し、作成時間でソートした順にロビーを取得しています。

ロビーの検索件数が多い場合は、一度に表示する件数を絞り、再度検索した際に続きを表示させています。

この機能は、表示されるロビーのうち、最も古い(最後に取得された)ロビーの作成時間を保存し、再検索時にその時間以降を検索対象とする条件をつけることで実現しています。

バージョンが異なるクライアントで作成されたロビーや、すでに最大人数で入れないロビーを非表示にする動作も、バージョンや入室状況を属性として付与することで実現しています。

属性は、参加人数などをユーザーに表示する以外に、内部処理に使うデータを変数として保存するためにも活用できます。

過去の資産をそのまま活用できたインゲームP2P通信

続いて、インゲームでの通信を担うP2Pインターフェースが解説されました。

インゲームでのP2P通信は、EOSが提供するUDP通信のAPI上に、サンドロットがこれまでに築いてきた通信処理をそのまま載せる形で実装できたそうです。

UDPとは、通信の信頼性や確実性よりも速度を重視するプロトコルです。確実性の高い送受信にはTCPと呼ばれるプロトコルを利用しますが、状況の変化が激しいアクションゲームでは十分な速度が出ないため、UDPを利用するのが一般的です。

しかし、不確実な通信のみではゲームが成り立たなくなってしまいます。そのため、UDPに信頼性を担保するための再送処理などを低負荷で追加するプロトコルReliableUDP(RUDP)が利用されることもあります。

EOSのP2Pインターフェースでは、UDPに加えてRUDPも利用できますが、本作では独自のRUDP実装がEOSのUDPで動作したため、その状態で運用しているそうです。

帯域の上限を超えないよう、優先度の低い通信はスキップ

インゲームの通信においては、帯域が一定の基準値を上回らないよう、通信内容に優先度を設定しています。使用している帯域が上限に近づいた場合、優先度の低い通信はスキップされます。

高い優先度は、キャラクターの生成ステージの進行プレイヤーの挙動などの情報に割り当てられています。一方で、更新が途切れ途切れでもゲームの大きな破綻にはつながらない、大量の雑魚キャラクターの位置などは優先度が低く設定されています。

優先度に基づく通信量制御により、ゲームの状況を同期する定期通信は、ピーク時でも320kbpsに抑えられています。

なお、ゲーム中は定期通信のほかに「攻撃をした」「大きなダメージを受けた」「重要な状態変化が起きた」などのイベントに応じたトリガー方式の通信も併せて実行されており、通信全体で1Mbps以下になるように調整されています。

通信量は、敵キャラクターのタイプによっても異なります。下記画像のシーンでは、飛行型の小型敵が大量に出ていますが、この敵は通信量が少ないため帯域のピークには到達せずに済んでいます。

通信帯域を節約する敵AIの処理

本作では「敵AIに関する通信を、敵がターゲットしているプレイヤーが担当する」ことで、通信量をプレイヤー間で分散しています。

各プレイヤーが自身と戦っている敵のみに関与することで、集中すべき敵はスムーズに動き、対象の敵と関係が薄いその他のプレイヤーは通信帯域を節約できます

とはいえ、1人のプレイヤーがヘイトを集めて大量の敵を相手すると帯域が集中しやすい点や、遠距離のプレイヤーから見た挙動の再現率が下がる点などのデメリットもあるとのことです。

EOSの導入にあたり苦労した点

苦労した点としては、Web上での情報が少なく、サンプルを正しく動かす手順異常系への対処法がわかりづらい点が挙げられました。

EOSで使用されるサーバーは必要十分な機能を備えており、カスタマイズは不要だったそう。しかし、サーバーに発生した障害に対する能動的な通知がなく、またいつの間にか直っていることがほとんどだったため、トラブルの検出が難しかったそうです。

一方で、独自フレームワークにおいてもトラブルなく運用でき、各プラットフォーム間での運用にほとんど差がない点は大きなメリットであると堀内氏は結論づけました。

『地球防衛軍6』公式サイト「『地球防衛軍6』におけるEOS導入と実装事例」スライド資料EOS Deep Dive 2023
rita

ゲームエンジンプログラマ。シリコンスタジオ、ゲームフリークを経て、現在はフリーランス的に活動中。低レイヤ・描画などのランタイムから、ツール・アセットパイプラインまで、ゲームに関する技術はなんでも守備範囲です。RPG・音ゲー・格ゲー・紳士ゲー・お馬さんなどなど幅広く嗜みます。新作を待ちわびているのは『世界樹の迷宮』『ブレイズアンドブレイド』『バーチャロン』など。

関連記事

UEFNで使えるプログラミング言語「Verse」のノウハウが集結。『UEFN.Tokyo 勉強会 03 Verse Night』レポート
2024.02.22
「GitHub Copilot Chat」、組織・個人向け一般提供を開始。コードの疑問やチェックを、Visual Studioなどの開発環境内にてチャット形式でAIに質問できる
2024.01.10
Epic Games Japan、2023/12/14-15に開催された「EOS/UE5 Deep Dive 2023」の講演資料を公開
2023.12.27
ゲームプログラミング向けOSSライブラリ「raylib」がバージョン5.0をリリース。プラットフォームの追加・改修を容易にするアップデートなど
2023.12.12
Unity、ゲームの最適化に関する電子書籍を無料公開。「モバイル」「コンソール/PC」向け2冊で、ボトルネックの特定方法やメモリ・GPU最適化などを解説
2023.12.11
「ゲーム制作には数学が必要!」って、実際どのレベルまで?図解で学ぶ、数式とゲームの関係性【CEDEC+KYUSHU 2023】
2023.12.06

注目記事ランキング

2024.02.27 - 2024.03.05
1
『フォートナイト』で動く本格的なゲームが作れるツール「UEFN」とは?従来のクリエイティブモードから進化したポイントを一挙紹介!
2
【CHALLENGE1】「クリエイター ポータル」を使って、UEFNで作成した島を世界中に公開する
3
【2022年5月版】今から始めるフォートナイトの「クリエイティブ」モードープレイ開始から基本的な操作方法まで解説
4
UEFNで使えるプログラミング言語「Verse」のノウハウが集結。『UEFN.Tokyo 勉強会 03 Verse Night』レポート
5
フォートナイト クリエイティブとUEFNで使える仕掛け一覧
6
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.1「アイテム系」
7
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.5「島の設定」
8
フォートナイトとUEFNがv28.30にアップデート。「NPCスポナー」が、スポーン・撃破時のエフェクトや移動速度のカスタマイズに対応
9
【STEP2】UEFNの基本的な使い方を覚えよう
10
【CHALLENGE2-1】フレンドと一緒にゲームを作ろう――UEFNプロジェクトをチームメンバーとリアルタイムで共同編集する
11
【STEP1】「UEFN」を入手しよう
12
まるで『マイクラ』?ボクセル地形を生み出す無料アセット「VoxelPlugin Free」で”地形を掘ったり積み重ねたり”して遊んでみよう
13
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.4「ゲームシステム系」
14
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part1
15
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.2「ユーティリティ系」
16
フルカラー書籍「UEFN(Unreal Editor For Fortnite)でゲームづくりを始めよう!」、ついに本日発売!全国書店で好評発売中!
17
【CHALLENGE3】UEFNの機能「ランドスケープ」を使ってオリジナルの地形を作る
18
NIKEのAir Maxをテーマにしたフォートナイトの島『Airphoria』、制作に関するチュートリアルが公開
19
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part1
20
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.10「UI系」Part2
21
『フォートナイト』で建築ビジュアライゼーション!?UEFNでオリジナルの世界観をどう作り上げたか、その手法を解説【UNREAL FEST 2023 TOKYO】
22
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.3「プレイヤー系」
23
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.6「チーム・対戦系」Part1
24
フォートナイト クリエイティブとUEFNで使える仕掛け一覧 Vol.7「NPC系」Part2
25
フォートナイトとUEFNがv26.30にアップデート。ロビー画面が一新され、クリエイターが島ごとにロビー背景を自由にカスタムできるように
26
【STEP6-1】「オリジナルキャラクターを登場させよう」――Fabでアセットをダウンロードしよう
27
「UEFN」って実際どうなの? 編集部が3時間で「みんなで遊べるアクションゲーム(?)」を作ってみた
28
【STEP5-1】スタート時のカウントダウンを作る
29
【STEP4-1】コース外に出たらデスする仕組みを作る
30
【STEP4-2】リスポーンとチェックポイントの仕組みを作る
VIEW MORE

イベントカレンダー

VIEW MORE

今日の用語

レンダリング(Rendering)
レンダリング コンピューターグラフィックスにおける、各種データ(3Dモデルなど)をプログラムを用いて計算し、画像として表示すること。レンダリングを行うプログラムをレンダラー(Renderer)と呼ぶ。
VIEW MORE

Twitterで最新情報を
チェック!