Version: 2020.1
Network Identity
Network Lobby Player

Network Lobby Manager

Note: UNet is deprecated, and will be removed from Unity in the future. A new system is under development. For more information and next steps see this blog post.

NetworkLobbyManager は特別なタイプの NetworkManager で、マルチプレイヤーゲームの実際のゲームの前の、ロビーを提供します。これを使用してネットワークに以下の設定を行うことができます。

  • プレイヤーの最大数
  • すべてのプレイヤーが準備完了になったときに自動でゲームを開始
  • ゲーム中に他のプレイヤーが参加するのを防ぐオプション
  • Couch Multiplayer (各クライアントに複数のプレイヤーを持つこと) のサポート
  • ロビーにいる間、プレイヤーがオプションを選択するためのカスタマイズ可能な方法

NetworkLobbyManager のプレイヤーオブジェクトには 2 種類あります。

LobbyPlayer オブジェクト

  • プレイヤーごとに存在します。
  • クライアント接続時またはプレイヤーが加えられた時に作成されます。
  • クライアントが切断されるまで継続します。
  • 準備完了フラグと設定データを保持します。
  • ロビーでのコマンド処理を行います。
  • NetworkLobbyPlayer コンポーネントを使用する必要があります。

GamePlayer オブジェクト

  • プレイヤーごとに存在します。
  • ゲームシーンの開始時に作成されます。
  • ロビーに再入場すると破棄されます。
  • ゲーム内のコマンド処理を行います。

プロパティ

プロパティ 機能
showLobbyGUI ロビーに関する開発向けの GUI を表示します
maxPlayers ロビーに入室できるプレイヤーの最大人数
maxPlayersPerConnection クライアントの接続ごとに追加できるプレイヤーの最大人数
lobbyPlayerPrefab ロビーに入室したときにプレイヤーとして作成されるプレハブ
gamePlayerPrefab ゲームが開始したときにプレイヤーとして作成されるプレハブ
lobbyScene ロビーで使用されるシーン
playScene ゲーム本体で使用されるシーン

詳細

  • Lobby Player Prefab フィールドには、NetworkLobbyPlayer コンポーネントがアタッチされているオブジェクトを設定する必要があります。
  • Lobby Manager には GUI が用意されています。詳細は multiplayer-lobby アセットパッケージを参照してください。

Network Lobby Manager

Network Lobby Manager は特別なタイプの NetworkManager で、マルチプレイヤーゲームのゲーム本体の前に入室する、簡単に使用できるロビーを提供します。

Network Lobby Manager には、マルチプレイヤーゲームに共通する多くのビルトイン機能があります。例えば、最大プレイヤー数の設定、すべてのプレイヤーの準備が完了したときに自動的にゲームを開始する機能、プレイヤーが進行中のゲームに加わることを防ぐオプションをサポートしています。Network Lobby Manager は、複数のプレイヤーが同じクライアントを使用して一緒にプレイする「カウチ」マルチプレイヤーゲームもサポートしています。

Network Lobby Manager コンポーネント
Network Lobby Manager コンポーネント

|プロパティ |機能 | |:—|:—| |Show Lobby GUI|これを有効にすると、開発者用のロビー用 GUI コントロールが表示されます。これは、開発者の開発を容易にすることのみを目的としています。完成したゲームで使用するプレイヤー用の UI は独自に作成してください。|
|Max Players|ロビーに入室できるプレイヤーの最大人数|
|Max Players Per Connection|クライアントの接続ごとに追加できるプレイヤーの最大人数|
|Min Players|ロビーに必要な最小プレイヤー数|
|Lobby Player Prefab|ロビーに入室したときにプレイヤーとして作成されるプレハブ|
|Game Player Prefab|ゲームが開始したときにプレイヤーとして作成されるプレハブ|
|Lobby Scene|ロビーで使用されるシーン|
|Play Scene|ゲーム本体で使用されるシーン| ||| |:–|:–| |ネットワーク情報|インスペクタのこのセクションを展開すると、以下のようなネットワーク関連の設定にアクセスできます。| |ウェブソケットを使用する|ホストとして実行する場合、この設定を有効にすると、ホストは通常のトランスポート層接続ではなく、WebSocket 接続をリッスンするようになります。これにより、WebGLクライアントが接続できるようになります(WebGLプラットフォーム用にゲームを構築した場合)。ゲームのこれらの WebGL インスタンスは、ホストとして動作することはできません(ピアホストモードまたはサーバーオンリーモードのいずれか)。したがって、マルチプレイヤー ゲームの WebGL インスタンスがお互いを見つけて一緒にプレイするには、LAN モードで動作するサーバーのみのインスタンスをホストし、一般に到達可能な IP アドレスを持つ必要があり、このオプションを有効にする必要があります。このチェックボックスは、デフォルトではオフに設定されています。| |ネットワークアドレス|現在使用されているネットワークアドレス。クライアントの場合は、接続先のサーバーのアドレスです。サーバーの場合、これはローカルアドレスです。デフォルトでは、「localhost」に設定されています。| |ネットワークポート|現在使用中のネットワークポート。クライアントの場合は、接続先のサーバーのポートです。サーバーの場合、これはリッスンポートです。デフォルトでは、7777に設定されています。| |サーバーバインドTo IP|特定のIPアドレスにバインドするかどうかをサーバーに指示できるようにします。このチェックボックスをオンにしない場合、特定のIPアドレスにバインドすることはありません(IP_ANY)。このチェックボックスは、デフォルトではチェックされていません。サーバーに複数のネットワークアドレスがあり(例:内部LAN、外部インターネット、VPN)、ゲームを提供するIPアドレスを特定したい場合に使用します。| |サーバーバインドアドレス|このフィールドは、[Server Bind To IP]チェックボックスをオンにしたときのみ表示されます。このフィールドには、サーバーがバインドする特定のIPアドレスを入力します。| |スクリプトCRCチェック|この機能を有効にすると、Unityはクライアントとサーバーが一致するスクリプトを使用しているかどうかをチェックします。これは、古いバージョンのクライアントが最新(更新)バージョンのサーバーに接続していないことを確認するのに便利です。このチェックボックスはデフォルトでチェックされています。これは、サーバとクライアントの間で(CRCチェック)[https://en.wikipedia.org/wiki/Cyclic_redundancy_check]を実行し、NetworkBehaviourスクリプトが一致することを確認することによって行われます。これは、クライアントとサーバーで意図的に異なるUnityプロジェクトを使用している場合など、適切でない場合があります。しかし、他のほとんどのケースでは、有効にしておくべきです。| |最大遅延時間|バッファリングされたメッセージを遅延させる最大時間を秒単位で指定します。デフォルトの0.01秒は、パケットを最大で10ミリ秒遅らせることを意味します。0に設定すると、HLAPI接続バッファリングが無効になります。デフォルトでは0.01に設定されています。| |最大バッファリングパケット数|NetworkConnection が各チャネルでバッファリングできるパケットの最大数。これは、ChannelOption.MaxPendingBuffers チャンネルオプションに対応するものです。デフォルトでは16に設定されています。| |パケットフラグメンテーション|これにより、 NetworkConnection インスタンスは、 maxPacketSize より大きい、最大64Kまでのパケットを断片化することができます。これにより、大きなパケットを送信する際に遅延が発生することがあります。このチェックボックスはデフォルトでオンに設定されています。 | |MatchMakerホストURI|MatchMakerサーバーのホストアドレスです。デフォルトでは mm.unet.unity3d.com にあるグローバルな Unity Multiplayer Service を指しており、通常これを変更する必要はありません。Unity は、ゲームのプレイヤーを世界中の地域サーバーに自動的にグループ化し、同じ地域のプレイヤー間で高速なマルチプレイの応答時間を保証します。これは、例えば、ヨーロッパ、アメリカ、アジアのプレイヤーは、通常、同じグローバル地域の他のプレイヤーとプレイすることになります。この値をオーバーライドして、どの地域のサーバーに接続するかを明示的に制御することができます。プレイヤーにグローバルリージョン外のサーバーに参加するオプションを与えたい場合、スクリプトでこれを行うことができます。例えば、アメリカにいるプレイヤーAが、ヨーロッパにいるプレイヤーBのマッチメーカーに接続したい場合。その場合、ゲーム内で希望するグローバルリージョンを設定できる必要があります。したがって、これを選択するためのUI機能を記述する必要があります。詳細と地域サーバーURIについては、APIリファレンスドキュメントNetworkMatch.baseUri を参照してください。| |MatchMaker Port|Matchmakerサーバーのホストポートです。 デフォルトでは443番を指しており、通常は変更する必要はありません。| |試合名|現在のマッチの名前を定義する。デフォルトでは “default ”に設定されている。| |最大マッチングサイズ|現在のマッチの最大プレイヤー数を定義します。デフォルトでは4人に設定されています。| |スポーンインフォ|インスペクタのこのセクションを展開すると、以下のスポーン関連の設定にアクセスできます。| |プレーヤープレハブ|Unity がサーバー上でプレイヤー GameObject を作成するために使用するデフォルトのプレハブを定義します。Unityはサーバー上のAddPlayer のデフォルトハンドラでPlayer GameObjectを作成します。この挙動をオーバーライドするには、(OnServerAddPlayer)[https://docs.unity3d.com/ScriptReference/Networking.NetworkManager.OnServerAddPlayer.html]を実装してください。| |オートクリエイトプレーヤー|接続時やSceneの変更時に、プレイヤーのGameObjectを自動生成させたい場合はチェックを入れてください。デフォルトでは、このチェックボックスはオンになっています。MigrationManager を使用していて、Auto Create Player を有効にしていない場合は、クライアントが再接続する際にClientScene.SendReconnectMessage を呼び出す必要があることに注意してください。| |プレイヤースポーン方式|Unityが新しいプレイヤーのGameObjectをどこでスポーンするかを決定する方法を定義します。デフォルトではRandomに設定されています。| |    Random|ランダムを選択すると、ランダムに選ばれたstartPositionsにプレイヤーをスポーンします。| |ラウンドロビン|ラウンドロビンを選択して、セットリスト内のstartPositionsを循環させます。| |登録されたスポーン可能なプレファブ|このリストを使って、Network Manager に認識させたいプレハブを追加します。これにより、ネットワークマネージャがプレハブを生成できるようになります。また、スクリプトで追加したり削除したりすることもできます。| |アドバンストコンフィグレーション|このチェックボックスをオンにすると、[Network Manager Inspector] ウィンドウに高度な設定オプションが表示されます。| |最大接続数|サポートする同時ネットワーク接続の最大数を定義します。デフォルトでは 4 に設定されています。| |Qosチャンネル|現在のネットワーク管理者が持つさまざまな通信チャネルと、各チャネルのQoS(Quality Of Service)設定を含むリストです。このリストを使用して、チャネルの追加や削除、QoS設定の調整を行います。また、スクリプトを使用してチャンネルを設定することもできます。各 QoS オプションの説明については、QosType を参照してください。| |タイムアウト|| |最小更新タイムアウト|ネットワークスレッドがネットワークメッセージを送信するまでの最短時間(ミリ秒単位)を設定します。ネットワークスレッドは、マルチプレイヤーネットワークメッセージをすぐに送信するわけではありません。代わりに各接続を一定の割合で定期的にチェックし、送信するものがあるかどうかを確認します。これはデフォルトで10msに設定されています。詳細については、API リファレンスドキュメントMinUpdateTimeout を参照してください。| |接続タイムアウト|Unityが接続を試みる際に、再度接続を試みるまでの時間(ミリ秒単位)を定義します。デフォルトでは2000msに設定されています。詳しくは、APIリファレンスドキュメントConnectTimeout を参照してください。| |切断タイムアウト|Unityが接続を切断とみなすまでの時間(ミリ秒単位)です。デフォルトでは2000msに設定されています。詳しくは、APIリファレンスドキュメントDisconnectTimeout を参照してください。| |Pingタイムアウト|Ping(キープアライブパケット)を送信するまでの時間(ミリ秒単位)。pingのタイムアウト時間は、切断タイムアウト時間の約3分の1から4分の1である必要があります。これは、サーバーがクライアントから少なくとも3回のPingを受信できなかった場合に、Unityがクライアントの接続を切断したと判断しないようにするためです。これはデフォルトで500msに設定されています。詳しくは、ConnectionConfig.PingTimeout のAPIリファレンスドキュメントを参照してください。| |グローバルコンフィグ|これらの設定はReactorに関連しています。Reactorは、基盤となるオペレーティングシステムからネットワークパケットを受信し、処理のためにそれらをマルチプレイヤーシステムに渡す、マルチプレイヤーシステムの一部です。| |スレッドアウェイクタイムアウト|Reactorが使用するタイムアウト時間(ミリ秒単位)。Reactorがこの値をどのように使用するかは、選択したReactor Modelによって異なります(下記参照)。デフォルトでは1msに設定されています。| |リアクターモデル|使用するリアクターの種類を選択します。リアクターモデルは、Unityが受信したパケットを読み取る方法を定義します。ほとんどのゲームやアプリケーションでは、デフォルトのSelectリアクターが適切です。ネットワークメッセージの処理におけるわずかな遅延を、CPU使用率の低下やバッテリー寿命の改善と交換したい場合は、Fix Rateリアクターを使用します。| |リアクターを選択|このモデルは select() API を使用しており、パケットが利用可能になるとすぐにネットワークスレッドが「目覚める」(アクティブになる)ことを意味します。この方法を使用すると、ゲームは可能な限り迅速にデータを取得することになります。これはデフォルトのReactor Modelの設定です。| |フィックスレートリアクター|このモデルでは、処理待ちの着信パケットがあるかどうかを確認する前に、ネットワークスレッドを所定の時間(Thread Awake Timeoutの値で定義)手動でスリープさせることができます。| |リアクター最大受信メッセージ|受信キューに格納されるメッセージの最大数を設定します。デフォルトでは1024メッセージに設定されています。| |Reactor Max送信メッセージ|送信キューに格納されるメッセージの最大数を設定します。デフォルトでは1024メッセージに設定されています。| |ネットワークシミュレーターを使用する|ネットワークシミュレータを使用する場合は、このチェックボックスをオンにします。ネットワークシミュレーターは、以下の設定に基づき、遅延とパケットロスをシミュレートして導入します。| |平均待ち時間のシミュレーション|シミュレーションする遅延量をミリ秒単位で指定します。| |パケットロスのシミュレーション|シミュレーションするパケットロスの量をパーセントで指定します。|

Network Identity
Network Lobby Player