今回のブログは、来年以降の製品開発の主要な取り組みについて紹介する Games Focus シリーズの第 8 回です。今回は、Unity Multiplayer Networking の現状と今後のリリース予定、そして将来のビジョンについてご説明します。
こんにちは、Kiki Saintonge です。Unity の Netcode for GameObjects ソリューションを提供する、マルチプレイヤーチームのプロダクトマネージャーです。
Unity に入社して 1 年ほどですが、2013 年から趣味で Unity のインディーゲーム開発をしています。私はゲームに情熱を持っており、特に皆さんの感動的な作品をプレイすることには並々ならぬ情熱を燃やしています。多くの皆さんから、特にマルチプレイヤー開発について、より完成度が高くアクセスしやすいソリューションが必要であるという声をいただいているので、今回こちらの記事でマルチプレイヤーソリューションについて書くすることにしました。皆さんが思っているよりも、私たちは皆さんの近くにいます。
正直なところ、マルチプレイヤーゲームを作るのは、仕組みの設計から実装、テストまで、本当に大変なことです。遅延、パケットロス、シーン管理、ネットワークに送るべきもの、そうでないものなど、多くのことを考慮しなければならず、そうした物事の大部分は、追跡したりシミュレーションしたりすることが困難です。サードパーティのネットワークソリューションでさえ、何が起こっているかを確認するためにサードパーティ(「4th」パーティかもしれませんが)のツールが必要なのです。
ゲームのための完全なネットワークシステムを構築することは、ゲームそのものと同じように、ゲームが提供する体験に合うようにユニークで洗練されたものであるべきです。
このような背景から、私たちはマルチプレイヤーゲームの中心にあるあらゆる側面に対応できる柔軟性を持ちながら、必要に応じてサードパーティのツールやサービスを容易に利用できるネットコードソリューションを構築したいと考えました。これが、私たちのネットコードソリューションの基本的な目標です。
またマルチプレイヤー開発では、シングルプレイヤーや協力型ゲームの文脈では考えられなかったかもしれない、サービスと規模という 2 つの要素が出てくると意識することが重要です。Unity ゲーミングサービスは Unity が最近立ち上げたプラットフォームで、ゲームサーバーホスティング(Multiplay)、Matchmaker、Relay、Lobby サービスが含まれています。強固な基盤の構築、魅力的なプレイヤー体験の創造、ゲームの成長を促進するために必要なすべてのツールを、統合された同一のエコシステム内で提供するように設計されています。
私たちは今年、素晴らしいネットコードソリューション群のリリースを発表しました。Netcode for GameObjects の最初のメジャーリリースは、Unity 2020 LTS と 2021 LTS で使えるようになりました。
この GameObject ベースのネットコードソリューションは、小規模な協力型マルチプレイヤーゲームを構築するのに役立ちます。しかし、DOTS(Entities)を使用して体験を構築されているのであれば、Netcode for Entities ソリューションが Unity 2022 TECH ストリームで近日中に利用可能になり、より大規模なマルチプレイヤー体験の立ち上げに使えるようになるという、嬉しいニュースがあります。そのリリースの詳細については、次回の連載をお楽しみにお待ちください。
これらのスタックは、マルチプレイヤー開発の基礎の作り始めの段階を幅広くカバーするものです。これらは、マルチプレイヤーゲームの分野で自走するために踏むことになる、数多くのステップの 1 つとなります。また、これらのリリースは、サーバーやクライアントとの通信方法の抽象化、ネットワーク上でのオブジェクトデータの送信、入力処理など、特に重要なネットワークシナリオに焦点を合わせています。
このリリースでは、ネットワークに接続されたオブジェクトのパケットロス、サイズ、レイテンシを追跡することができる重要なツールも複数サポートされます。Network Profiler はエディターにビルトインされているプロファイラーの拡張機能であり、また Runtime Network Stats Monitor (RNSM)はカスタマイズ可能で軽量なネットワーク状態の「Profiler」ビューで、プレイテストのためにスタンドアロンビルドで実行することが可能です。
これらのツールは、エディターから com.unity.multiplayer.tools パッケージをインストールと同時にインストールされます。
私たちのすべてのネットコードスタック(Entities も含む)は、Transport レイヤーの上に構築されています。このレイヤーはネットコードに依存せず、あらゆるソリューションで利用することができます。
Unity Transport Protocol(UTP)は、ユーザーデータグラムプロトコルに Unity Relay のサポートと DTLS によるセキュリティ機能を追加して拡張したプロトコルです。このレイヤーは、Windows、Mac、Linux、iOS、Android、およびすべての主要なコンソールで動作します。
また、Transport パッケージのデバッグシミュレーターのプロパティで、軽量なネットワークシミュレーションの機能も提供しています。これにより、エディターでテストする際に、レイテンシや帯域の問題を抑制したり、シミュレートしたりすることができます。
この低レベルのネットワーキングライブラリに直接アクセスしたい場合は、com.unity.transport パッケージから直接インストールすることができます。
Netcode for GameObjects は比較的新しいものですが、すでにこれを使ったゲームも作られています。
Fika Productions と Team17 の素晴らしいチームは、手描きの絵を活かした美しいゲーム『Ship of Fools』を制作しています。このゲームは、完全に Netcode for GameObjects で開発された、航海をテーマにしたハイスピードな協力型マルチプレイヤーゲームです。
私たちが常に考えているのは、マルチプレイヤーツールによってネットワークで起きていることのギャップをカバーし、よくわからないままにされていた部分を明白にすることです。
マルチプレイヤー再生モードは、マルチプレイヤー開発時のエディターでの体験を非常に心地よいものにするための大きな第一歩となるでしょう。
このマルチプレイツールの目指すところは、再生モードに入ったら「ただ動く」ことです。シングルプレイヤーのワークフローと同じ体験を提供しますが、同じエディターセッションで最大 4 つのクライアントを実行することができ、それぞれのコンソール情報を受け取り、ネットワークベースのタグ付けシステムで区別することが可能になっています。
もう 1 つの機能である Network Simulator は、Transport レイヤーから発展させ、ラグスパイクの導入、Ping レートの設定、接続・切断のトリガー、プレイテスト中に実行する特定のネットワークシナリオをカスタマイズできる UI を備えた、より機能的なツールに拡張していきたいと考えています。
Transport パッケージと Burst の統合を進めていく予定で、WebSocket のサポートも検討しています。
専用サーバーを持つことは、多くのマルチプレイヤーゲームにとって核となることであり、どのようなヘッドレスサーバーを構築するか、よりきめ細かく制御する必要性を伴います。
私たちは、専用サーバーのワークフローの調査を始めました。これは、サーバー内で必要なアセットとそうでないアセットを、より明確に制御できるようにすることから始まります。基本的には、サーバー構築の際に必要なコンテンツを選択することで、長期的には時間の節約になり、また帯域幅の節約につながる可能性もあります。
Netcode for GameObjects のこれらの機能およびその他のステータスに関心のある方は、 マルチプレイヤーネットワークロードマップで、バージョン 1.0 に含まれるものと今後のリリースのために準備されているものを確認してください。また、最近開催された Unite 2022 のロードマップセッションでは、Unity エコシステム全体の概要を確認できます。
マルチプレイヤーゲームを作るのは簡単ではありませんし、SDK のドキュメントが提供されていても、マルチプレイヤーゲームの開発について模索する際に圧倒されてしまうのはよくあることです。
Unity の目標は、素晴らしいマルチプレイヤーゲーム体験をプレイヤーに提供するためのツールを揃え、皆さんをサポートすることです。これを実現するための活動には、基盤となるネットワーク技術だけでなく、その応用を理解するために必要なドキュメンテーションや教育用テンプレート(『Boss Room』など)を提供することも含まれています。
現在、Unity のマルチプレイヤーソリューションについて学ぶために利用できるリソースがたくさんあります。
『Boss Room』は Netcode for GameObjects で作られた小規模な協力型ゲームのサンプルプロジェクトです。マルチプレイヤーゲームフローの背後にある概念やパターンに触れてもらえるよう、そのすべてを利用できるように設計されています。
Netcode for GameObjects でできることの新機能や全体的な能力について知ってもらうために、社内プロジェクトの開発にも継続的に取り組んでいます。
私たちが作った最新のゲームは『Galactic Kittens』で、これは実際に遊べる、オープンソースの 2D 協力型マルチプレイヤーシューティングゲームです。
取り掛かりとして、Unity のマルチプレイヤーツール群について書いた、以下のブログ記事をご覧ください。
さらに、私たちの素晴らしいコミュニティによって作られた素晴らしいリソースもあります。
Games Focus シリーズへぜひ皆さんのご意見をお寄せいただきますよう、お願いいたします。このブログに関する質問やコメントは、マルチプレイヤーフォーラムまたはこちらの専用スレッドにお寄せください。
ロードマップの詳細については、Productboard をご覧ください。Unity ID でログインし、機能性クッキーの使用を承諾していただく必要があります。このインタラクティブなページに表示されているボードはそれぞれクリックすることができ、その操作で各トピックの詳細を確認することができ、またフィードバックを送ることも可能です。カードをクリックし、自分から見た重要度を選び、自分の意見を入力し、送信します。そうすると、フィードバックが対応する製品チームに直接送られます。
Netcode for GameObjects は優秀なネットコードソリューションですが、もっと大きなもの、例えば銀河系や一度に何千人ものプレイヤーがアクティブになるマルチサーバ MMO を作りたいと考えているなら、より大きな世界と豊かな環境を作る方法を紹介する Games Focus シリーズの次のブログのリリースを楽しみにお待ちください。