ドキュメント

サポート

Relay

Relay

Unity Mirror サンプル

Explore a deprecated sample project demonstrating Relay integration with the Mirror Networking API.
読み終わるまでの所要時間 5 分最終更新 4日前

Unity Mirror サンプルプロジェクト へようこそ! このプロジェクトでは、Unity Transport Package (UTP)RelayMirror Networking API と共に使用する方法を示します。
  • Unity Transport Package (UTP) は、信頼性、順序付け、断片化などのオプション機能を備えた、UDP ソケット上に接続ベースの抽象化レイヤーを提供する低レベルのネットワークライブラリです。
  • Relay は、参加コードスタイルのワークフローを使用して、専用ゲームサーバーやピアツーピア通信を必要とせずにプレイヤー同士を安全かつ簡単に接続できる Unity のサービスです。
  • Mirror は、Unity プラットフォーム用の高レベルなネットワークライブラリです。
UTP のファイルは
Assets/UTPTransport
ディレクトリ、Mirror のファイルは
Assets/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 Mirror サンプルプロジェクトには、2 つの異なるコンポーネントがあります。 ゲームクライアントコンポーネントとゲームサーバーコンポーネントは、Unity と Mirror Networking API を使用します。

ゲームクライアント

ゲームクライアントは、プレイヤーがゲームサーバーとバックエンドサービスに接続するために自分のマシン上でローカルに実行する実行ファイルです。ゲームクライアントは Relay ありでも Relay なしでも実行できます。

ゲームサーバー

ゲームサーバーは、ゲームサーバープロセスを実行する実行可能ビルドです。 ゲームサーバー実行ファイルは (開発用に) ローカルで実行することも、本番用に Game Server Hosting などのサービスでホストすることもできます。

ガイド

以下のセクションでは、サンプルプロジェクトを操作し、テストし、適応させる方法について説明します。

Asset Store から Mirror サンプルをインストールする

サンプルプロジェクトの UTP トランスポートの実装を自分のプロジェクトにインストールするには、以下のステップを実行します。GitHub 上のリポジトリ から、サンプルプロジェクトのコードを入手することもできます。
  1. Asset Store 内の Mirror のページ に移動します。
  2. Add Mirror to My Assets (Mirror をマイアセットに追加する) を選択します。
  3. Unity エディターを起動します。
    1. Package Manager (パッケージマネージャー) を使用して Mirror をインポートします。
      1. Window (ウィンドウ) > Package Manager (パッケージマネージャー) > Packages: My Assets (パッケージ: マイアセット) > Mirror > Download/Import (ダウンロード/インポート) を選択します。
    2. Package Manager (パッケージマネージャー) を使用して Relay をインポートします。
      1. Window (ウィンドウ) > Package Manager (パッケージマネージャー) > Add (追加) > Add package from git URL... (GIT URL からパッケージを加える...) > "com.unity.services.relay@1.0.4" を選択します。
    3. Package Manager (パッケージマネージャー) を使用して Jobs をインポートします。
      1. Window (ウィンドウ) > Package Manager (パッケージマネージャー) > Add (追加) > Add package from git URL... (GIT URL からパッケージを加える...) > "com.unity.jobs" を選択します。
    4. サンプルプロジェクトから自分のプロジェクトに
      Assets\UTPTransport
      ディレクトリをコピーします。
    5. Mirror.NetworkManager
      コンポーネントを自分の
      GameObject
      にアタッチします。
    6. UTP.UtpTransport
      コンポーネントを自分の
      GameObject
      にアタッチします。
    7. UTP.UtpTransport
      コンポーネントを
      Mirror.NetworkManager
      コンポーネントの
      Transport
      フィールドに割り当てます。
    8. Mirror によって自分のゲームオブジェクトに自動的にアタッチされた、
      kcp2k.KcpTransport
      コンポーネントを削除します。

サンプルプロジェクトをテストする

テスト目的でサンプルプロジェクトの 2 つのインスタンスを起動するには、以下のステップを実行します。
  1. Unity エディターでサンプルプロジェクトを開きます。このプロジェクトでは、Unity 2020.3 以降がサポートされています。
  2. エディターのドロップダウンから、ParallelSync > Clones Manager (クローンマネージャー) を選択します。ParallelSync を使用すると、同じプロジェクトの複数のエディターインスタンスを起動できます。
  3. Add new clone (新しいクローンを追加) を選択します。
  4. クローンを作成したら、Open in New Editor (新しいエディターで開く) を選択します。
  5. 両方のエディターインスタンスで Play (再生) を選択します。
  6. 両方のエディターインスタンスで Auth Login (ログイン認証) を選択します。これにより、Relay 用の Unity Authentication Service (UAS) で認証を行います。
Relay 用の UAS で両方のエディターインスタンスの認証を行ったら、サンプルプロジェクトの UTP トランスポートと Relay 機能をテストできます。 サンプルの GUI を使用して、以下の機能をテストします。
  1. Standard Host (標準ホスト) を選択して、UTP トランスポートを使用してサーバーを起動します。
  2. Client (without Relay) (クライアント (Relay なし)) を選択して、UTP トランスポートを使用してサーバーに接続します。
  3. Relay Host (Relay ホスト) を選択して、Relay サーバーの 割り当て を行います。
  4. Client (with Relay) (クライアント (Relay あり)) を選択して、Relay サーバーに接続します。
Linux 用にクロスコンパイルする
Unity エディターで、ゲームクライアント実行ファイルとゲームサーバー実行ファイルの両方を Linux 用にクロスコンパイルできます。
  1. Unity Hub を起動し、Installs (インストール) を選択します。
  2. バージョン 2020.3.24f1 の横の歯車を選択します。
  3. Add modules (モジュールを加える) を選択します。
  4. Linux Build Support (IL2CPP and Mono) (Linux Build Support (IL2CPP および Mono)) モジュールを選択し、Install (インストール) を選択します。
Linux Build Support モジュールのインストールが完了したら、Unity エディター内で Linux をビルドオプションとして選択します。
  1. Unity エディターを起動します。
  2. File (ファイル) > Build Settings (ビルド設定) を選択します。
  3. ターゲットプラットフォームとして Linux を選択します。
  4. サーバービルドをパッケージ化する場合は、Server build (サーバービルド) を選択します。それ以外の場合は、Build (ビルド) を選択し、ビルド場所を選択します。
ゲームクライアントを実行する
ゲームクライアントコンポーネントは、スタンドアロンアプリケーションとしてローカルに実行することも、Unity エディターから実行することもできます。 ゲームクライアントをスタンドアロンアプリケーションとして実行するには、ファイルエクスプローラーまたはコマンドラインインターフェースからゲームクライアント実行ファイルを選択します。 Unity エディターからゲームクライアントを実行するには、以下のようにします。
  1. Unity エディター (バージョン 2020.3 以降) で、Unity Mirror サンプルプロジェクトを開きます。
  2. Play (再生) を選択します。
ゲームサーバーを実行する
ゲームサーバーコンポーネントは、コマンドラインインターフェースで
-server
引数を使用してローカルで実行できます。
ゲームクライアントとゲームサーバーを一緒に実行する
ゲームクライアント実行ファイルとゲームサーバー実行ファイルを、一方をスタンドアロンアプリケーションとして実行し、もう一方を Unity エディターから実行することで、ローカルで実行できます。 例えば、ゲームサーバーをスタンドアロンアプリケーションとして実行し、ゲームクライアントを Unity エディターから実行するには、以下のようにします。
  1. コマンドラインインターフェースからゲームサーバーを起動します。
  2. -log
    引数を付加して、ログをリアルタイムで表示します。
  3. Unity エディターで、Start Client (クライアントを起動) を選択します。

サンプルプロジェクトを適応させる

Unity Mirror サンプルプロジェクト では、以下のタスクを実行するためのサンプルコードが提供されています。
  1. Mirror Network Manager を初期化する
  2. Relay 機能を追加する
  3. UTP トランスポート機能を追加する
  4. カスタム Network Manager を使用してすべてを一緒にまとめる
  5. テスト用に GUI を公開する
Mirror Network Manager を初期化する
Assets/Mirror/Runtime/NetworkManager.cs
NetworkManager
クラスは、Mirror Network Manager のシングルトンインスタンスです。Mirror Network Manager コンポーネントは、ゲームの状態管理、スポーン管理、シーン管理など、マルチプレイヤーゲームのネットワーク面を管理するために使用します。
Relay 機能を追加する
Assets/UTPTransport/RelayNetworkManager.cs
RelayNetworkManager
クラスは、
NetworkManager
クラスを Relay 機能で拡張します。これは、以下を行う方法を示します。
UTP 機能を追加する
Assets/UTPTransport/UtpTransport.cs
UtpTransport
クラスは、UTP および Relay と互換性のある
Mirror.Transport
のインスタンスです。これは、以下を行う方法を示します。
  • Relay 参加コードを使用してクライアントを設定する
  • 参加コードから 割り当て を取得する
  • Relay 地域を取得する
  • Relay サーバーを割り当てる
カスタム Network Manager を作成する
Assets/Scripts/MyNetworkManager.cs
MyNetworkManager
クラスは、Mirror 用の UTP トランスポートと Relay サービスの機能を一緒にまとめる
RelayNetworkManager
のインスタンスです。
ユーザーインターフェースを公開する
Assets/Scripts/MenuUI.cs
MenuUI
クラスは、サンプルを動作させる UI を表示する役割を担います。サーバーを起動してクライアントを接続するために、
MyNetworkManager
とのインターフェースとなります。

Mirror 用の UTP トランスポートを自分のプロジェクトで使用する

このサンプルには、Mirror 用の Unity Transport Package (UTP) トランスポート が含まれています。以下のセクションの指示に従うことで、このサンプルのコードを自分のプロジェクトで使用できます。
既存のトランスポートから UTP トランスポートに移行する
既に Mirror を使用していて、いずれかのビルトインのトランスポートから UTP トランスポートに移行したい場合は、以下のステップを実行します。
  1. Unity エディターを起動します。
  2. Mirror.NetworkManager
    コンポーネントを含んでいるシーンを見つけて開きます。
  3. UTP.UtpTransport
    コンポーネントを自分の
    GameObject
    にアタッチします。
  4. UTP.UtpTransport
    コンポーネントを
    Mirror.NetworkManager
    コンポーネントの
    Transport
    フィールドに割り当てます。
  5. 自分の
    GameObject
    から既存の
    Mirror.Transport
    コンポーネントを削除します。
  6. ポートやログの冗長性など、
    UTP.UtpTransport
    コンポーネントのパラメーターを満足のいくように設定します。
Relay と UTP を使用する
Relay を使用したい場合は、
Mirror.NetworkManager
の代わりに
UTP.RelayNetworkManager
を使用する必要があります。
UTP.RelayNetworkManager
は、
Mirror.NetworkManager
を継承し、Relay サービスとの相互作用のための機能を追加したものであるためです。
Relay を使用する前に、Unity Authentication Service (UAS) で認証を行う必要があります。独自の認証サービスを使用する場合でも、Relay サービスでは認証が必要となります。 以下のコードスニペットは、Unity Authentication Service で認証を行う方法を示しています。
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
を使用して、Relay サーバーを割り当てたり、参加コードを使用して Relay サーバーに参加したりできます。

サポートを受ける

開始時に問題が発生した場合は、サポートを受けることができます。Relay サポートポータル に移動し、チケットを送信してください。必ず、チケットカテゴリとして Networking Package (ネットワークパッケージ) > Mirror を選択してください。