こんにちは!
XRクリエイターの伊東(@ALAKIWebVRAR1)です。
※TwitterでもWebXRの事を中心に情報発信中です。
よかったらフォローお願いします!
Follow @ALAKIWebVRAR1
Unityでマルチプレイを実装する方法はいくつかありますが、その中でも「Netcode for GameObjects (※以下NGO)」と「Relay」を使った実装方法をご紹介します。
ここでは大枠の概要をご説明しつつ、細かい説明に関しては参考記事をご紹介いたします。
NGOとは
「NGO」は、マルチプレイを実装するためのUnityパッケージです。
元々は「MLAPI」という名前のパッケージでした。
2022年6月末に、正式なバージョン1.0.0がリリースされました。
大まかにいうと、NGOは以下の2つの役割を担います。
ローカルネットワーク内の接続
同じネットワーク環境、例えば、同じ職場のネットワークに接続している2つの端末同士を接続して、マルチプレイを実装することができます。
最初の1台目がホストとなり、他の複数台がホストとして接続する形になります。
「ローカルネットワーク内」という制限があり、全く違うネットワークに繋がっている端末同士の場合、NGOではマルチプレイを行うことができません。
Gameobjectの同期
NGOを使うと、ホストとクライアントが接続されている状態で、UnityのGameobjectの同期が簡単に行うことができます。
トランスフォームの値を同期したり、アニメーションを同期させるということができます。
Relayとは
先ほど、「NGOではローカルネットワークを超えた接続ができない」という旨をご説明しました。違うネットワーク下にある端末同士を接続するには、ホストとクライアントが直接つながる形ではなく、中継する「リレーサーバー」という存在が必要になります。
そこで、そのリレーサーバーを簡単に利用できるサービスが「Relay」です。
Relayの利用は無料枠ありの「従量課金制」になっています。
詳しくは以下をご確認ください。
https://unity.com/solutions/gaming-services/pricing
「Relay」を使って違うネットワーク下のホストとクライアントを接続し、「NGO」を使ってプレイヤーとなるGameobjectを同期させてマルチプレイを実装する、というのが今回の主旨になります。
マルチプレイ実装までの流れ
NGOとRelayの大枠がざっくり掴めたところで、具体的な実装の流れをご紹介します。
Relay導入
Relayの設定の流れについて、まずは流れを羅列します。
①Relayのパッケージインストール
②Relay用のUnityプロジェクトセッティング
③Unity Dashboard(Webブラウザでアクセス)からRelayサービスを有効化
①〜③の部分までは、以下の記事がとても詳しく書いてくださっているのでリンクを貼っておきます。
https://xrdnk.hateblo.jp/entry/2021/10/30/175456
※ベータ版の内容ですが、2022年10月30日現在は導入までの流れに大差ありませんでした。
NGO導入
NGOのインストールと初期の設定に関して、また、動作のイメージを掴んでいただくには、ここで文章でご説明するよりも以下の動画をみていただくのが一番手っ取り早いです。
https://www.youtube.com/watch?v=GRUtGLL8iMQ&t=2079s
※Unity Japanさん公式の動画です
RelayとNGOの連携
上記動画の最後の部分で、少しだけNGOとRelayの組み合わせに関して説明がありますが、ここではもう少し概要をご説明しようと思います。
Unityシーン側の設定、ネットワーク設定用のゲームオブジェクトを用意したり、プレイヤー用のPrefabを用意したりといった前準備は、NGOの担当範囲となります。ここは先ほどの動画でしっかりと説明されています。
次に、実際にホスト、またはクライアントとしてマルチプレイに参加するためのUIを用意します。
ホストは、「Create」ボタンを押してマルチプレイ用の部屋を新しく立ち上げるイメージです。立ち上げに成功すると、部屋の番号が取得でき、UI側に出力します。
クライアントは、ホストが作成した部屋の番号を何らかの方法で受け取り、番号を手入力してから「Join」ボタンを押して部屋に入室します。
「Create」「Join」を押した後、
①それぞれホストとクライアントで認証の手続きをし
②完了すれば入室
③そしてNGOのGameobjectの同期を開始する
という流れになります。
上記①〜③に関して、実際にサンプルとなるコードをご紹介します。
以上がNGO × Relayでマルチプレイを導入するまでの流れになります。
初見ではややこしい部分がありますが、大枠の流れを把握して、NGO、Relayの役割をしっかりと理解しておくと、実装が容易になるかと思います。
本記事がその手助けになることを願っています!