自分のゲームに適したネットコードの選び方

編集部注:適切なネットコードソリューションを選ぶためのより役立つ情報をゲーム開発者の皆さんにお届けするため、このブログは 2022 年 11 月に、Unity のネットコードソリューションの最新情報を元に更新されました。ただしレポートのデータは 2020 年版のままとなっています。
ほとんどのマルチプレイヤーゲームの開発において、レイテンシ、パケットロス、シーン管理など、ゲームの体験に影響を与えるネットワーク関連固有の課題を考慮して解決しなければならず、その解決方法はゲームにより多岐にわたります。
正しい解決策を見つけるには、ゲームのジャンル、プレイヤー数やネットワークされたオブジェクト数の大きさ、競争力に加え、ネットワーク層の制御がどのくらい必要かといった側面も考慮しなければなりません。また、想定するシナリオによって必要とされるネットコードソリューションにも違いが出てきます。
このブログでは、皆さんにご自分のプロジェクトに最適なソリューションを選んでいただくための参考として、Unity エンジンで使われる一般的なネットワーキングライブラリに加え、これらのソリューションを使っている開発者の体験について行われた研究の結果について解説します。
ネットコードはマルチプレイヤーの物語の半分を「作り」ます。これは具体的には、あるプレイヤーから別のプレイヤーにデータのビットを送信し、そのビットを同期させて一貫したゲームの状態にするライブラリを指して、開発者がそのことをどう表現するかを示したものです。これは光速の限界やデータが到着するまで待つ間のレイテンシに対処する方法でもあります。
完全なソリューションは、ハードウェアへ、あるいはハードウェアからのトラフィックをすべて管理するトランスポート(ベース)レイヤーと、一般的なニーズを単純化するより高レベルのネットコード抽象化およびツールに分けられることがしばしばあります。
たった 1 つであらゆる種類のゲームや体験を完璧にカバーできるソリューションはありません。例えば『Apex Legends』のように、チート防止のための権限を持たせた専用ゲームサーバーを運用している FPS ゲームと、『Heroes Strike』のように、チート緩和のための決定論的ロールバック機能を備えた P2P トポロジの上で動く MOBA ゲームとでは、ネットコードに対する要件は全く違ってきます。
すべてのシナリオに適合する単一のネットコードソリューションはないのですから、開発者は、目の前にある選択肢を評価し、どのネットコードソリューション(またはソリューションの組み合わせ)が開発しているタイトルのニーズに最も適しているかを判断する必要があります。また多くの場合、既存のネットコードを拡張したりカスタマイズしたりする必要が生じます。
Unity には 2 つのファーストパーティ製ネットコードソリューションが別々に存在しています。つまり、Netcode for GameObjects と Netcode for Entities です。
Netcode for GameObjects(NGO)は、Unity ゲームエンジン用に構築されたネットワーキングライブラリです。現在リリースされている NGO では、主に小規模な協力型ゲームの開発をサポートすることに最大の焦点を当てています。このカテゴリの P2P ゲームについては、Netcode for GameObjects と Unity Relay および Unity Lobby ソリューションとの組み合わせが非常に上手く作用します。
マルチプレイヤー開発のもう一方の極は Netcode for Entities です。これは Unity の DOTS ECS(Entity-Component-System)機能セットの一部として出荷されたもので、皆さんがスケーラブルなマルチプレイヤーの世界を作り出し、プレイヤーに提供するための力になってくれる製品です。
Netcode for Entities を使うと、ゲーム世界のサイズ、プレイヤー数、および複雑なネットワーク間のやり取りを、パフォーマンスを犠牲にすることなく実現することができます。かつてそうだったように、開発者がその対処に頭を悩ませる必要もありません。
ブログで、Unity 2022.2 TECH ストリームリリースの詳細をお読みください。
Unity では、最も広く使用されているサードパーティ製のネットコードソリューションについてのフィードバックを収集し、どのフレームワークが最適に機能するかを決定するプロセスをガイドするために、ディシジョンツリーを作成しました。
これらのツールを作成するために 3 つのソースからデータを集めて分析しました。
- 特定のネットコードフレームワークを使用した経験に関して 200 名以上の Unity ユーザーに対して行った調査
- Unity を使ったマルチプレイヤーゲームを積極的に出荷しているユーザーを対象とした 20 件以上の詳細なインタビュー
- Unity のチームが MLAPI(現在の名称は Netcode for GameObjects)、DarkRift 2、Mirror、Photon Quantum を使ってプロトタイプを構築する中で得た教訓
これらの観点で評価を行いました。顧客に人気のあるネットコードソリューションを以下に示す軸でスコア化し、ランク付けしてもらうようにお願いしました。
ネットワーキングは複雑なものです。そのため、皆さんがネットコードソリューションを通じて得る安定性とサポートの水準は非常に重要です。各ネットコードソリューションの安定性とサポートは、バグやクラッシュの可能性、問題を修正したり問題のデバッグに関するサポートの応答時間、API への破壊的変更が起きる可能性の 3 つの軸に沿って評価しました。
一般的なタスクに着手、実行することがどの程度容易であるか、良質なサンプルの提供、ドキュメント、チュートリアル、プロトタイピングのためのシンプルな API などが提供されているかという観点も含めて、ユーザーに評価していただいた結果をまとめました。
パフォーマンスが低いソリューションを欲しがる人がいるでしょうか。各ネットコードソリューションのこの項目のスコアについては、ガベージコレクションやアロケーションができるだけ少ないこと、レイテンシオーバーヘッドが最小限であること、計算パフォーマンスが高いこと、可能であればマルチスレッド機能を備えていることで評価しました。
皆さんが作ろうとしているゲームのジャンルによっては、ネットコードソリューションのスケーラビリティが重要な検討項目となります。この項目はパフォーマンスに似ていますが、パフォーマンスを大きく犠牲にすることなく、より多くのクライアント接続をサポートする能力に焦点を当てています。
機能を完備したネットコードソリューションを持つことは、あらゆるジャンルあるいは皆さんのプロジェクトが持つゲーム特有のユニークなニーズをサポートする上で重要です。ソリューションをランク付けするにあたり、私たちはオブジェクトや変数の複製、RPC、シーン管理などの中間レベルの機能に焦点を当てました。予測やラグの補償など、高レベルの機能についても加味しています。
皆さんがネットコードソリューションのための予算を正しく見積もれるよう、各ソリューションのコスト面での評価も盛り込みました。ライブラリおよびソリューションのコストと、別途管理しなければならない運用上のオーバーヘッドなど、隠れたコストの両方を考慮しています。
ここから私たちの調査結果と推奨事項へと読み進む前に、3 つポイントを強調しておきたいと思います。
1 つ目は、皆さんのゲームで使うネットコードソリューションの選択とは重要な決定事項であり、調査結果だけを頼りにせず、ぜひ皆さんご自身でも評価していただきたいということです。今回の記事を書いたのは、最も一般的な選択肢をまとめた内容を共有することで、皆さんの意思決定プロセスを楽なものにしたいと思ってのことではありますが、皆さんがそれぞれ自分のゲームに特有の事情を考慮して、独自の評価を行うべきだと考えます。
2 つ目は、このリストはすべての選択肢を網羅しているわけではないということです。特にトランスポートレベルでは、Enet、LiteNetLib、Ruffles、Telepathy など、すでに確立したソリューションが多数存在していますが、それらは含まれていません。
3 つ目は、このデータは私たちが 2020 年に行った調査に基づいたものであり、今日の現状に合わせたソリューションを完全に理解するには追加の調査が必要になるだろうということです。
まずは以下の情報をご覧いただくのが良いでしょう。しかし、完全版のネットコードに関するレポートもダウンロードして、目を通されることをおすすめします。完全版のレポートでは、以下のサードパーティ製のネットコードソリューションについて、より詳細に説明しています。
- MLAPI(現在は Unity に買収され、Netcode for GameObjects へと進化しました)
- DarkRift 2
- Photon PUN
- Photon Quantum 2.0
- Mirror
注:完全版のレポートは PDF 形式で配布されており、このレポートでは、顧客の言及が最も多かった複数のソリューションをカバーしています。ただし、レポートに掲載したもの以外にもいくつかのソリューションの名前を挙げる顧客もいました。また、Forge、Normcore、Bolt、LL(Enet、LiteNet)など、まだ評価するのに十分な顧客からのエビデンスを集めていない他のソリューションについて議論している方もいらっしゃいました。言及されたソリューションが皆さんの環境における選択肢になるかどうかを考える際に、このポイントは考慮しておくことをお勧めします。

次に大ヒットをさらうバトルロイヤルゲームの制作を志している人にも、居心地の良いオンライン協力型ゲームを作りたい人にとっても、マルチプレイヤーネットワークや現在使えるネットコードソリューションの基本を理解することは不可欠です。
Unity の Netcode for GameObjects ソリューションと協力型ゲームのサンプル『Boss Room』、およびドキュメンテーションをチェックして、次のマルチプレイヤープロジェクトを今すぐ始めましょう。さらに大規模なマルチプレイヤーゲームを作ろうとされている方は、Photon Fusion と Game Server Hosting を使った『Battle Royale』サンプルをご覧ください。
制作を楽しもう!