Unity Mirror サンプル
Explore a deprecated sample project demonstrating Relay integration with the Mirror Networking API.
読み終わるまでの所要時間 5 分最終更新 4日前
Unity Mirror サンプルプロジェクト へようこそ! このプロジェクトでは、Unity Transport Package (UTP) と Relay を Mirror Networking API と共に使用する方法を示します。
- Unity Transport Package (UTP) は、信頼性、順序付け、断片化などのオプション機能を備えた、UDP ソケット上に接続ベースの抽象化レイヤーを提供する低レベルのネットワークライブラリです。
- Relay は、参加コードスタイルのワークフローを使用して、専用ゲームサーバーやピアツーピア通信を必要とせずにプレイヤー同士を安全かつ簡単に接続できる Unity のサービスです。
- Mirror は、Unity プラットフォーム用の高レベルなネットワークライブラリです。
Assets/UTPTransportAssets/Mirror要件と制限事項
Unity Mirror サンプルには以下の要件があります。- サポートされているバージョンの Unity エディター。このサンプルプロジェクトでは、バージョン 2020.3 以降がサポートされています。
- Unity Gaming Services (UGS) アカウント
- Unity Services
- Unity Relay
- Unity Transport Package (Relay に付属)
- Unity Jobs
- Unity Authentication Service (UAS)
- Mirror Networking API v67.1.0
制限事項
このサンプルは、そのままでは Game Server Hosting で機能しません。ただし、Game Server Hosting (GSH) で機能するようにサンプルを適応させることはできます。GSH を使用するためにサンプルを適応させたい場合は、Relay が GSH と同じスペースを占めるピアツーピア模倣ソリューションであることに留意してください。そのため、Relay と GSH を一緒に使用することは意味がありません。前提条件
先に進む前に、サンプルプロジェクトを使用するための前提条件をすべて完了していることを確認してください。- Unity Dashboard プロジェクトを作成する
- Relay サービスを有効にする
- Unity エディターをインストールする (バージョン 2020.3 以降)
- Unity エディターにログインする
- Unity Dashboard プロジェクトを Unity エディターにリンクする
サンプルのアーキテクチャ
Unity Mirror サンプルプロジェクトには、2 つの異なるコンポーネントがあります。 ゲームクライアントコンポーネントとゲームサーバーコンポーネントは、Unity と Mirror Networking API を使用します。ゲームクライアント
ゲームクライアントは、プレイヤーがゲームサーバーとバックエンドサービスに接続するために自分のマシン上でローカルに実行する実行ファイルです。ゲームクライアントは Relay ありでも Relay なしでも実行できます。ゲームサーバー
ゲームサーバーは、ゲームサーバープロセスを実行する実行可能ビルドです。 ゲームサーバー実行ファイルは (開発用に) ローカルで実行することも、本番用に Game Server Hosting などのサービスでホストすることもできます。ガイド
以下のセクションでは、サンプルプロジェクトを操作し、テストし、適応させる方法について説明します。Asset Store から Mirror サンプルをインストールする
サンプルプロジェクトの UTP トランスポートの実装を自分のプロジェクトにインストールするには、以下のステップを実行します。GitHub 上のリポジトリ から、サンプルプロジェクトのコードを入手することもできます。- Asset Store 内の Mirror のページ に移動します。
- Add Mirror to My Assets (Mirror をマイアセットに追加する) を選択します。
- Unity エディターを起動します。
-
-
Package Manager (パッケージマネージャー) を使用して Mirror をインポートします。
- Window (ウィンドウ) > Package Manager (パッケージマネージャー) > Packages: My Assets (パッケージ: マイアセット) > Mirror > Download/Import (ダウンロード/インポート) を選択します。
-
Package Manager (パッケージマネージャー) を使用して Relay をインポートします。
- Window (ウィンドウ) > Package Manager (パッケージマネージャー) > Add (追加) > Add package from git URL... (GIT URL からパッケージを加える...) > "com.unity.services.relay@1.0.4" を選択します。
-
Package Manager (パッケージマネージャー) を使用して Jobs をインポートします。
- Window (ウィンドウ) > Package Manager (パッケージマネージャー) > Add (追加) > Add package from git URL... (GIT URL からパッケージを加える...) > "com.unity.jobs" を選択します。
-
サンプルプロジェクトから自分のプロジェクトに ディレクトリをコピーします。
Assets\UTPTransport -
コンポーネントを自分の
Mirror.NetworkManagerにアタッチします。GameObject -
コンポーネントを自分の
UTP.UtpTransportにアタッチします。GameObject -
コンポーネントを
UTP.UtpTransportコンポーネントのMirror.NetworkManagerフィールドに割り当てます。Transport -
Mirror によって自分のゲームオブジェクトに自動的にアタッチされた、コンポーネントを削除します。
kcp2k.KcpTransport
-
Package Manager (パッケージマネージャー) を使用して Mirror をインポートします。
サンプルプロジェクトをテストする
テスト目的でサンプルプロジェクトの 2 つのインスタンスを起動するには、以下のステップを実行します。
- Unity エディターでサンプルプロジェクトを開きます。このプロジェクトでは、Unity 2020.3 以降がサポートされています。
- エディターのドロップダウンから、ParallelSync > Clones Manager (クローンマネージャー) を選択します。ParallelSync を使用すると、同じプロジェクトの複数のエディターインスタンスを起動できます。
- Add new clone (新しいクローンを追加) を選択します。
- クローンを作成したら、Open in New Editor (新しいエディターで開く) を選択します。
- 両方のエディターインスタンスで Play (再生) を選択します。
- 両方のエディターインスタンスで Auth Login (ログイン認証) を選択します。これにより、Relay 用の Unity Authentication Service (UAS) で認証を行います。
- Standard Host (標準ホスト) を選択して、UTP トランスポートを使用してサーバーを起動します。
- Client (without Relay) (クライアント (Relay なし)) を選択して、UTP トランスポートを使用してサーバーに接続します。
- Relay Host (Relay ホスト) を選択して、Relay サーバーの 割り当て を行います。
- Client (with Relay) (クライアント (Relay あり)) を選択して、Relay サーバーに接続します。
Linux 用にクロスコンパイルする
Unity エディターで、ゲームクライアント実行ファイルとゲームサーバー実行ファイルの両方を Linux 用にクロスコンパイルできます。- Unity Hub を起動し、Installs (インストール) を選択します。
- バージョン 2020.3.24f1 の横の歯車を選択します。
- Add modules (モジュールを加える) を選択します。
- Linux Build Support (IL2CPP and Mono) (Linux Build Support (IL2CPP および Mono)) モジュールを選択し、Install (インストール) を選択します。
- Unity エディターを起動します。
- File (ファイル) > Build Settings (ビルド設定) を選択します。
- ターゲットプラットフォームとして Linux を選択します。
- サーバービルドをパッケージ化する場合は、Server build (サーバービルド) を選択します。それ以外の場合は、Build (ビルド) を選択し、ビルド場所を選択します。
ゲームクライアントを実行する
ゲームクライアントコンポーネントは、スタンドアロンアプリケーションとしてローカルに実行することも、Unity エディターから実行することもできます。 ゲームクライアントをスタンドアロンアプリケーションとして実行するには、ファイルエクスプローラーまたはコマンドラインインターフェースからゲームクライアント実行ファイルを選択します。 Unity エディターからゲームクライアントを実行するには、以下のようにします。- Unity エディター (バージョン 2020.3 以降) で、Unity Mirror サンプルプロジェクトを開きます。
- Play (再生) を選択します。
ゲームサーバーを実行する
ゲームサーバーコンポーネントは、コマンドラインインターフェースで-serverゲームクライアントとゲームサーバーを一緒に実行する
ゲームクライアント実行ファイルとゲームサーバー実行ファイルを、一方をスタンドアロンアプリケーションとして実行し、もう一方を Unity エディターから実行することで、ローカルで実行できます。
例えば、ゲームサーバーをスタンドアロンアプリケーションとして実行し、ゲームクライアントを Unity エディターから実行するには、以下のようにします。
- コマンドラインインターフェースからゲームサーバーを起動します。
- 引数を付加して、ログをリアルタイムで表示します。
-log - Unity エディターで、Start Client (クライアントを起動) を選択します。
サンプルプロジェクトを適応させる
Unity Mirror サンプルプロジェクト では、以下のタスクを実行するためのサンプルコードが提供されています。- Mirror Network Manager を初期化する
- Relay 機能を追加する
- UTP トランスポート機能を追加する
- カスタム Network Manager を使用してすべてを一緒にまとめる
- テスト用に GUI を公開する
Mirror Network Manager を初期化する
Assets/Mirror/Runtime/NetworkManager.csNetworkManagerRelay 機能を追加する
Assets/UTPTransport/RelayNetworkManager.csRelayNetworkManagerNetworkManager- 参加コード を使用する。
- Relay サーバー の情報を取得する。
- 利用可能な Relay 地域 を確認する。
- NetworkDriver をホストプレイヤーとして起動する。
- Relay サーバーに参加する。
- 参加コードを使用して接続する。
UTP 機能を追加する
Assets/UTPTransport/UtpTransport.csUtpTransportMirror.Transport- Relay 参加コードを使用してクライアントを設定する
- 参加コードから 割り当て を取得する
- Relay 地域を取得する
- Relay サーバーを割り当てる
カスタム Network Manager を作成する
Assets/Scripts/MyNetworkManager.csMyNetworkManagerRelayNetworkManagerユーザーインターフェースを公開する
Assets/Scripts/MenuUI.csMenuUIMyNetworkManagerMirror 用の UTP トランスポートを自分のプロジェクトで使用する
このサンプルには、Mirror 用の Unity Transport Package (UTP) トランスポート が含まれています。以下のセクションの指示に従うことで、このサンプルのコードを自分のプロジェクトで使用できます。既存のトランスポートから UTP トランスポートに移行する
既に Mirror を使用していて、いずれかのビルトインのトランスポートから UTP トランスポートに移行したい場合は、以下のステップを実行します。- Unity エディターを起動します。
- コンポーネントを含んでいるシーンを見つけて開きます。
Mirror.NetworkManager - コンポーネントを自分の
UTP.UtpTransportにアタッチします。GameObject - コンポーネントを
UTP.UtpTransportコンポーネントのMirror.NetworkManagerフィールドに割り当てます。Transport - 自分の から既存の
GameObjectコンポーネントを削除します。Mirror.Transport - ポートやログの冗長性など、コンポーネントのパラメーターを満足のいくように設定します。
UTP.UtpTransport
Relay と UTP を使用する
Relay を使用したい場合は、Mirror.NetworkManagerUTP.RelayNetworkManagerUTP.RelayNetworkManagerMirror.NetworkManager認証を行った後は、try{ await UnityServices.InitializeAsync(); await AuthenticationService.Instance.SignInAnonymouslyAsync(); Debug.Log("Logged into Unity, player ID: " + AuthenticationService.Instance.PlayerId);}catch (Exception e){ Debug.LogError(e);}
UTP.RelayNetworkManager