Search Unity

皆さんの意思決定にお役立ていただけるよう、現在人気のあるマルチプレイヤーゲーム向けネットコードフレームワークについて、調査と評価を行いました。

すべてのマルチプレイヤーゲームの開発において、レイテンシ、パケットロス、シーン管理など、ゲームの体験に影響を与えるネットワーク関連固有の課題を考慮して解決しなければならず、その解決方法はゲームにより多岐にわたります。正しい解決策を見つけるには、ゲームのジャンル、プレイヤー数やネットワークされたオブジェクト数の大きさ、競争力に加え、ネットワーク層の制御がどのくらい必要かといった側面も考慮しなければなりません。また、想定するシナリオによって必要とされるネットコードソリューションにも違いが出てきます。

たった 1 つであらゆる種類のゲームや体験を完璧にカバーできるソリューションはありません。例えば『Apex Legendsのように、チート防止のための権限を持たせた専用ゲームサーバーを運用している FPS ゲームと、『Heroes Strike』のように、チート緩和のための決定論的ロールバック機能を備えた P2P トポロジの上で動く MOBA ゲームとでは、ネットコードに対する要件は全く違ってきます。

すべてのシナリオに適合する単一のネットコードソリューションはないのですから、開発者は、目の前にある選択肢を評価し、どのネットコードソリューション(またはソリューションの組み合わせ)が開発しているタイトルのニーズに最も適しているかを判断する必要があります。また多くの場合、既存のネットコードを拡張したりカスタマイズしたりする必要が生じます。

Unity とネットコード

すでにご存知かもしれませんが、Unity はファーストパーティのネットコードソリューションを 2 つ提供しています。UNet は GameObject を使うプロジェクト向けのソリューションで、現在はメンテナンスモードになっています。一方、DOTS-netcode は ECS を使うプロジェクト向けのソリューションで、現在はプレビュー版として提供されています。

私たちは現在、コンソールにタイトルを出している顧客向けに UNet の LLAPI をサポートしていますが、多くの高レベルのネットワーキングのニーズについて完全なソリューションではありません。幸いにも、Unity には強力で非常に優秀なオープンソースコミュニティとパートナーエコシステムが存在しており、その貢献から様々なシナリオに合わせた数多くのソリューションが生み出されています。

私たちは最近、ブログ記事「2021 年へのロードマップ」で、ファーストパーティ製の Unity ネットコードソリューションをもってこの分野に貢献することを改めて表明しました。私たちがこのソリューションの開発に取り組んでいる間、クリエイターの皆さんのために、代替となるネットコードについて調査と評価を行い、皆さんご自身のタイトルに適したソリューション選択のお役に立つ情報を提供したいと思います。

情報で武装しよう

Unity のチームは、最も広く使用されているサードパーティ製のネットコードソリューションについてのフィードバックを収集し、どのフレームワークが最適に機能するかを決定するプロセスをガイドするために、ディシジョンツリーを作成しました。

これらのツールを作成するために 3 つのソースからデータを集めて分析しました。

  • 特定のネットコードフレームワークを使用した経験に関して 200 名以上の Unity ユーザーに対して行った調査
  • Unity を使ったマルチプレイヤーゲームを積極的に出荷しているユーザーを対象とした 20 件以上の詳細なインタビュー
  • Unity のチームが MLAPI、DarkRift 2、Mirror、Photon Quantum を使ってプロトタイプを構築する中で得た教訓

成功した顧客が言及したトップのネットコードソリューションを、以下の変数に基づいてスコア化し、ランク付けしました。

  • 安定性/サポート:バグやクラッシュの可能性、問題を修正したり問題のデバッグに関するサポートの応答時間、API への破壊的変更が起きる可能性の 3 つの軸に沿って評価しました。
  • 使いやすさ:一般的なタスクに着手、実行することがどの程度容易であるか、良質なサンプルの提供、ドキュメント、チュートリアル、プロトタイピングのためのシンプルな API などが提供されているかという観点も含めて、ユーザーに評価していただいた結果をまとめました。
  • パフォーマンス:この項目については、ガベージコレクションやアロケーションができるだけ少ないこと、レイテンシオーバーヘッドが最小限であること、計算パフォーマンスが高いこと、可能であればマルチスレッド機能を備えていること。これらの観点で評価を行いました。
  • スケーラビリティ:この項目はパフォーマンスに似ていますが、パフォーマンスを大きく犠牲にすることなく、より多くのクライアント接続をサポートする能力に焦点を当てています。
  • 機能の幅広さ:オブジェクトや変数の複製、RPC、シーン管理などの中間レベルの機能に焦点を当てた評価軸です。予測やラグの補償など、高レベルの機能についても加味しています。
  • コスト:ライブラリおよびソリューションのコストと、別途管理しなければならない運用上のオーバーヘッドなど、隠れたコストの両方を考慮しています。

ここから私たちの調査結果と推奨事項へと読み進む前に、2 つポイントを強調しておきたいと思います。1 つ目は、皆さんのゲームで使うネットコードソリューションの選択とは重要な決定事項であり、調査結果だけを頼りにせず、ぜひ皆さんご自身でも評価していただきたいということです。今回の記事を書いたのは、最も一般的な選択肢をまとめた内容を共有することで、皆さんの意思決定プロセスを楽なものにしたいと思ってのことではありますが、皆さんがそれぞれ自分のゲームに特有の事情を考慮して、独自の評価を行うべきだと考えます。2 つ目は、このリストはすべての選択肢を網羅しているわけではないということです。特にトランスポートレベルでは、enet、litenetlib、ruffles、telepathy など、すでに確立したソリューションが多数存在していますが、それらは含まれていません。

これから示す情報は取り掛かりにすぎません。ぜひ完全版のレポートもダウンロードして、目を通されることをおすすめします。完全版のレポートでは、これらのサードパーティ製のネットコードソリューションについて、より詳細に説明しています。

この表だけでは決められませんか?

ネットコードソリューションの選択という、重要な意思決定のプロセスを容易に行うための図も作成しました。私たちが皆さんの決定に影響を与える可能性のあるすべての技術的な変数を把握することは不可能であるため、抽象化によって重要なディテールがそぎ落とされている可能性があることにはご注意ください。この図は、皆さんのゲームが成功を収めるまでの道のりをサポートするソリューションの評価を始めるときに考慮すべき要素の一部をカバーするものです。

ネットコードソリューションの初期的な評価を始めるための大まかなガイド図

念のため、このディシジョンツリーで使われている重要な用語を簡単にまとめておきます。

  • ゲーム専用サーバー(Dedicated game server; DGS):クライアント-サーバーネットワークの実装であり、サーバーがクライアントデバイスとは別に専用のコンピュート上でホストされるものを指します。このオプションは高価ですが、スケーラブルで安全です。
  • リッスンサーバー(Listen server):クライアント-サーバーの実装のうち、サーバーがクライアントデバイス上でホストされるものです。安価ですが、スケーラブルではなく、安全ではありません。
  • 決定論的ロックステップ(Deterministic lockstep):P2P 実装では、入力のみが他のすべてのプレイヤーに送信され、「ロックされたステップ」で同期されます(すなわち、同じシミュレーションのティックで一度に同期されます)。クライアント上の決定論的処理によって、すべてのクライアントが同じ状態を維持することが保証されます。このシステムは安価で安全ですが、複雑な決定論の実装が要求されます。
  • 決定論的ロールバック(Deterministic rollback):これは決定論的ロックステップを強化したもので、クライアントは更新を待っている間に入力を先行して予測します。この設定はより複雑ですが、ロックステップよりも応答性の高いゲームを可能にします。比較的安価で安全ですが、非常に複雑な決定論とシミュレーションの実装が要求されます。

完全版のレポートで私たちの分析の詳細をご確認ください(ダウンロードする前にいくつか設問があります)。マルチプレイヤーとネットワークの概念にある程度精通している方には、このレポートはより理解しやすいものでしょう。復習が必要と感じる方は、この講演をご覧ください。要点のほとんどをカバーしています。

 


 

本記事で共有した情報が皆さんのお役に立てば幸いです。フォーラムで私たちの分析に関するご意見やご質問、バグや気になるデータ点に関するご指摘などをお聞かせください。

38 replies on “自分のゲームに適したネットコードを選ぼう”

Given the 5-star scale here, I feel like Normcore should at least get a special mention, since for VR project its Ease Of Use would be rated at about 8, thereby ruining the scale of several other systems I’m familiar with. It can be used for non-VR as well, with maybe a 4-star rating for Ease Of Use. Support and stability is 5 stars. The main downside is low feature set, which honestly is what makes it distinct relative to the rest of the list, and therefore worth calling out.

Was using Photon PUN to develop a smaller version of MOBA title for over a years now for a customer project, I’m not very sure whether I’m choosing the correct networking for my game, even its wrong I think its too late to switch

You say MLAPI is the “best overall” but it uses UNET by default. This makes zero sense since you’re basically recommending in 2020 after explicitly saying it’s deprecated to continue using it? And if you want something that isn’t “in maintenance mode”, aka dead, then you need to roll your own or adopt another which adds much more nuance and complexity then this over simplified blog post says. Am I missing something?

While MLAPI does use UNet as its default transport, it is really easy to switch to another transport using the MLAPI installer. For example, when you click on the transports tab, you see Ruffles (made by MLAPI developer), LiteNetLib, and other options. UNet is the default transport because (AFAIK) it is built-in to Unity, so providing it by default causes less bloat (as opposed to including Ruffles in the MLAPI dll, even if you don’t use it).

It may be best for Unity to make note in the chart or article somewhere that they’re not recommending the default MLAPI you get. That’s not going to be obvious for most people. Netcode != transport layer but people looking for solutions that aren’t already specialized in this area will likely not understand. It reads “we recommend MLAPI”. There is a small note about transport level just above the chart but it’s not clear.
This may also apply to the others as well but I’m not familiar with all of them besides DOTSNetcode kind of which I know doesn’t use unet in anyway

Also how did this affect Performance or Scalability grading? Transport layer is a huge part of performance. If you use a transport layer with any netcode solution (not just MLAPI) that isn’t performance or fits your needs, then the netcode choice can be kind of irrelevant.

So for that chart/grading of Performance and scalability, what transport was used in this article?

These are great questions.

First of all, as Gavin mentioned, MLAPI’s only dependency on “UNet” is that it uses LLAPI as the default transport – which is in maintenance mode and is not the most efficient transport available today. However, LLAPI is also the only transport we’ve found so far today that is reasonably stable AND supports console launches, so we don’t fault MLAPI for keeping it as the default offering for now.

As for performance ratings, as we’ve said, the stars are an aggregation from 3 data sources:
– user ratings in the survey – MLAPI supports many transports, so it’s not clear which one users were using when they rated the solution for perf/scale
– in-depth user interviews and project evaluations – in the cases we discussed, some used LLAPI, and some used a variety of others including ENet, Photon, etc.
– our own prototyping – so far has included LLAPI and ENet, and Enet absolutely is the more efficient solution between the two.

All this said, you are correct – interpret the ratings as a “typical case” primarily from user ratings that were verified in interviews and prototypes. It is not an exact science :)

What was the data source for the ratings of DOTS-Netcode? (did you just rate it yourselves? how humble of you to put 4 stars in feature breadth)

So the performance ratings on each of these, and possibly other categories, you and we as readers don’t actually know what they mean and what the metric was for them? You’re just taking “user ratings”. There’s no actual testing being done here, in other words, these ratings could all be completely incorrect?

What about forge networking remastered? I was playing around with that lately and found it good to use. A bit hard to learn for a new user like me but under the hood, its multi-threaded and has a low overhead. Did you guys gave it a shot and if yes, what cause it to be not in the list?

I second this as well. Forge Remastered seemed to be pretty accessible. Last I was looking at it, there were some questionable performance problems but it’s flexible. It has all the basics you need for P2P and maybe a midscale, non-competitive game in my opinion. If you want to do a competitive, massive scale game you’d have to make a bunch of stuff on your own. I presume that’s maybe why it’s not listed here? Still, I’d make the same argument as some others in the list.

I’m also interested in any feedback that the author might have on why Forge was skipped or why it didn’t make the cut. It’s worth noting that Forge is free, completely open source, and the discord server just passed 3,000 members.

There are 2 versions of Forge:
Remastered – Large developer base and well tested
Alloy – New (2020) and made for larger teams who need extreme flexibility and the ability to modify behavior of Forge in a modular way without needing to modify the Forge source code.

Hi Lovepreet (& Brent & O)

We included Forge in the survey, and while 9 users had attempted to use it, almost none recommended it highly. It scored 2 out of 5 overall. The biggest concern cited was in stability/support – it seems that the original creators have not been as active recently, so bugs and issues have not received a prompt response. For this reason, we did not pursue it further into in-depth interviews and prototyping, and hence, we don’t have sufficient data to include it in the full report.

cheers

I’m also positive that’s not true. The discord is always active and the creator there, or at least some of the OG people, are always improving it and people using it. There’s even as previously mentioned Alloy which is version 3.0 of Forge. It’s being worked on to this day, with more updates than Unity even gives to its own packages. This is misinformed.

Ironically I’m the creator of Forge, I don’t have any mentions or DMs in Discord from anyone asking any specific questions related to evaluating Forge. I’d highly suggest checking out Forge Alloy :). The wiki on GitHub is up to date on how to use Alloy. Forge is free, open source, has no limitations, and I have no intentions to charge for anything. It’s a labor of love and the community is active, awesome, and contribute a lot to the GitHub. Also my email is a bit spammed now so I’m sorry if you sent something there, the Discord is the best way to reach me :).

I do want to point out that open source and GitHub are the biggest factors to this project. If I do get hit by a bus someday and can’t work on it any longer, well there are a ton of people who can and have. There is no need to link me personally working on Forge at every moment to the value of the library. It is a community project now more than it is mine honestly and I consider all contributors as the creators of Forge. So I suppose in that sense we have 46 (and growing) creators of Forge haha. With over 1,200 stars and nearly 300 forks of Forge on GitHub, there is no way the project will ever “die” :)

I thought Dots netcode will be the best thing.but as with unity’s these late reley behavior i am fed up amd i know many others who also has given up..unity always says one netcode is not suitable for every game.. everyone who is doing complex networking stuff knows that amd they also know that there are very less no of unity multiplayer title which use unity’s netcode (hlapi or llapi) because those netcode are never good enough for complex multiplayer stuff..that is why i switched to unreal engine..it has the best networking stack. atleast far more better than unity or unity’s hlapi’s a bit better version which is called mirror..though it is not even close to good..so my suggestion ..stick with raknet,dark rift 2 or wven mlapi but avoid unet or mirror. and best thing will be wait until dots netcode is gets any stable release.

Hey Pritam, thanks for participating in the conversation and sharing your experience. Let me chime in for a few of the points you mentioned, hope this helps:
– First, DOTS is a great technology and is a big part of the future ahead :) We also understand that some users need stable options now, and that many prefer to stick with GameObjects, so we are pursuing both.
– Yes LLAPI and HLAPI are in maintenance mode bc they each had flows that required a full rewrite to solve, but, thankfully, the Unity community & ecosystem stepped up and thanks to them there are plenty of options to build multiplayer games in Unity today. We continue to accelerate releasing a solid & stable solution asap.
– There are multiple multiplayer networking games built in Unity (recent e.g. Mediatonic’s Fall Guys), so it is indeed possible to succeed today.
– Unreal has a great networking layer, but as we mention in the blog post, there is no single netcode solution that solves perfectly for every game.

Cheers!

Hey Alan, thanks for your comment. We did include Bolt in the survey. While it does offer a solution for client-server games, many users cited severe enough challenges with performance and scale that we found MLAPI, DarkRift, and Mirror to be better options to reach successful outcomes for client-server games. Once we learned of these significant struggles, we did not progress into deeper evaluation with interviews and prototypes, so the evaluation is not sufficiently complete to include in the full report.

Hello everyone, I just want to let you know that if you consider getting into MLAPI, and you get stuck during any part of the process, make sure to join our discord by clicking the button near the top of the page here: https://mlapi.network/ . The discord is full of people who are willing to help you out with your issues and help you make an awesome game.

I know it’s difficult to assess all the options as you mentioned, however I’d be keen to see a more of the results from your surveys for the adoptions of the different solutions if you are looking to publish those results?

As a business we’ve recently just evaluated the different multi-user options for our next project (so much so that this would have been very useful a month ago!), and very quickly came across Nakama from Heroic Labs (https://heroiclabs.com/) and VERTX (https://www.visr-vr.com/) which are not listed on your findings? Did these solutions come up at all during your research?

We know of some users who leverage Heroic Labs for services, but we’ve not found users who have successfully used it for networking; therefore, we do not have sufficient data to offer recommendations for it. VERTX is similar, we have not seen any proof-points for it, and we cannot share a perspective about it.
As we state in the doc, the landscape is broad!

Cheers!

When I started my project this summer with Unity, it was clear the network landscape was ‘complicated’. Official support for UNET was in sunset mode and DOTS wasn’t ready yet. There were many 3rd parties claiming defacto status, but nothing stood out as a clear winner. I opted for Mirror based on the limited research I could find on the options out there that might be best for my small multiplayer game. It was a bit scary to think I might have chosen wrong and waste many development hours down the wrong path. Luckily for me, Mirror has proven to be the right choice for my needs. But I could have really used this article back then :)

Thank you to whomever wrote this blog post for anyone coming to Unity fresh now with a multiplayer game idea. This is the sort of guidance the community needs if you are encouraging first time game developers to try the engine, as I did.

Hey Sazboom, I’ll take your comment to the team behind the content, thanks for sharing. It was quite a team effort to process all the data, talk to customers & run the prototypes. Sorry that we couldn’t release it on time for your early journey though! Cheers ;)

To be honest Mirror is best of all with there is solution for everything. For example you can easyly implement Steam p2p with just change transport layer component. I would give just 5 stars Scalability just for this.

I think the point is that their test doesn’t actually provide any data so users should probably understand this blog post as little more than a public note that Unity’s solution for networking is pretty much the least ideal solution of them all and that there are better alternatives on the Asset Store.

The ratings and analysis are whimsical and unverifiable, at best.

Hi Jes, thanks for your comment and for sharing DOTSNet lib.
The report is scoped to the top options shared by the community and customers when it comes to building GameObjects-based games today. We added dots-netcode as a reference to the table but didn’t go in-depth with DOTS-based options because it’s not yet sufficiently stable for most users.
On top of that, the report doesn’t represent the entire landscape, but the most common entry points.
Hope this helps!

DavidS

DOTSNet is made by the guys who make Mirror… which is pretty cool – it means that they have a lot of experience with game networking code so that explains all the good reviews. Price is pretty high. When my DOTS/ECS based games is ready for multiplayer I’ll definitely be giving that one serious consideration. Thanks for the link.

DOTSNET is currently 50% off. And it scales like mad. There are demos of 10k+ entities all broadcasting position/rotation running at like 50fps on a laptop and 70k entities running at around 20fps.

コメントを残す

メールアドレスが公開されることはありません。 * が付いている欄は必須項目です