Unity間で通信する方法を調べたので調べたアセットについて記録します。
マルチプレイ向け
Netcode for GameObjects
- MLAPI(Mid level API) をベースに作成されたUnity公式アセット。
- WANを経由する場合、UnityのRelayサーバー(2021年12月3日現在β版)を利用することでNAT越えが可能。
- パッケージマネージャからインストール可能
- Unity Transport for Netcode for GameObjectsパッケージもパッケージマネージャからインストールする必要がある。
- Simulatorツールから遅延を設定することができ、テストに利用することができる。
簡易的な使い方の流れ(ローカルネットワークで利用する場合)
- NetworkManagerコンポーネントを配置し、NetworkTransportをUnityTransportに設定、ConnectionDataにIP,ポート番号を設定する。
- 同期させたいオブジェクトにNetworkObject,NetworkTransformをコンポーネントにアタッチする。
- NetworkManagerコンポーネントのPlayerにNetworkObjectを設定する。
- PlayerのコントローラースクリプトにはMonoBrhaviourではなくUnity.Netcode.NetworkBehaviourを継承し、if(this.IsOwner)を処理に追加して、自分の操作に対してのみ受け付けるようにする。
- サーバーのみ実行する処理をif(this.IsServer)に記述する。
- (任意)[Unity.NetCode.ServerRPC]を記述し、サーバーにクライアントの状態を伝えるメソッドを作成する。
- ゲーム開始後にNetworkManagerコンポーネントのStartHost(StartClient)を実行する。
※Animatorを同期させたい場合はNetworkAnimatorコンポーネントをアタッチする。
※サーバーではなく、クライアント側のトランスフォームを優先させて同期したい場合、Unity Transport for Netcode for GameObjectsパッケージのインポート画面のSampleからClientNetworkTransformをインポートし、NetworkTransformの代わりにアタッチする。この場合[Unity.NetCode.ServerRPC]は不要
リレーサーバーを利用する場合
2021年12月3日時点ではβ版のため、無料で利用できます。(現状Max10クライアントまで接続可能)
- パッケージマネージャからRelayパッケージをインストールする。
- Unity ゲーミングサービス(https://unity.com/ja/solutions/gaming-services)にてRelay Activateを有効にする。
- Relayサーバーへの接続スクリプトを配置(上記Unity黒河さんのリポジトリ参照)
※上記説明はクラウド版について記述、BuildSettings画面でDedicated Serverを選択してビルドすることでサーバーアプリケーションを作成することもできる。この場合はMAX10クライアントの制限はない。
Photon
専用のPhotonサーバーを介して通信するため、NUTパンチの考慮は不要
利用者が多いので情報が手に入りやすい
Photon~って名前の用語が沢山あるので最初は戸惑うが、現時点ではPUN2が無難な選択
音声通信機能あり
無償版の"FREE"と有償版の"+"がある
無料版はモバイル向けにビルドするにはProライセンスが必要
マッチメイキング対応で既存の部屋に参加したり、自分の部屋を作成したりできる。
転送量超過すると課金が発生するので注意
Photon Unity Networking 2 (PUN2)
推奨バージョン
Photon Unity Networking (PUN)
現在非推奨でUnity2020以降サポートなし
Photon Server
サーバー側でロジックを組むことができるサービス
サーバー側にデータを保持できる
PUN*有償版より高価
Photon Cloud
Photon Serverで動作するクラウド版
PUN*と同義
Photon Bolt
ホストクライアント方式(P2P)
NAT超え考慮必要
Photon Quantum
オンラインマルチプレイヤーゲームのための高性能決定論的ECS(エンティティコンポーネントシステム)フレームワーク
情報が少ないので説明省略
Unet
公式アセットだが非推奨のアナウンスあり
MLAPI(Mid level API)
UNetの代替
無料
現在はUnity公式版に移行中
元々オープンソース個人で開発されていたネットワークゲーム用フレームワーク
1 つのクライアントがホストとして機能し、他のクライアントがそれに接続する、ホスト/リッスンサーバーモデル及び専用ゲームサーバーモデルに対応
旧版
Mirror
オープンソースのネットワークアセット
非公式のUNETの後継ネットワークライブラリ
P2P
その他
以下、Unity公式から引用