Version: 2022.2
言語: 日本語
Network Discovery
Network Lobby Manager

Network Identity

重要: UNet は非推奨のソリューションになり、現在、新しい Multiplayer とネットワーキングソリューション (Netcode for GameObjects) が開発中です。詳細は、GameObjects Web サイトの Unity Netcode を参照してください。

NetworkIdentity コンポーネントは、Unity ネットワーク高レベル API システムの心臓部分と言えます。このコンポーネントはネットワーク上のゲームオブジェクトの固有の ID を管理し、ネットワークシステムにゲームオブジェクトを認識させるために ID を使用します。

インスペクターウインドウの Network Identity コンポーネント
インスペクターウインドウの Network Identity コンポーネント
プロパティ 機能
Server Only これを有効にすると、Unity はゲームオブジェクトをサーバー上でのみスポーンし、クライアント上でスポーンしないようにします。
Local Player Authority これを有効にすると、このプレイヤーゲームオブジェクトを所有するクライアントに、そのオブジェクトのネットワーク制御権限を与えます。つまり、そのクライアント上のプレイヤーゲームオブジェクトが自身に関する権限を持ちます。Network Transform などの他のコンポーネントはこのことを利用して、どのクライアントが権限をもっているかを判断します。

インスタンス化されたネットワークゲームオブジェクト

Unity のサーバーが権限を持つネットワークシステムでは、サーバーは NetworkServer.Spawn を使用して、ネットワーク ID を持つネットワーク化されたゲームオブジェクトをスポーンする必要があります。これにより、サーバーに接続されているクライアント上に自動的にゲームオブジェクトが作成され、それらに[NetworkInstanceId](ScriptRef:Networking.NetworkInstanceId.html が割り当てられます。

You must put a Network Identity component on any Prefabs that spawn at runtime for the network system to use them.

シーンベースのネットワーク化されたゲームオブジェクト

また、シーンの一部として保存したゲームオブジェクト (周辺的小道具など) をネットワーク化することもできます。ネットワーク化されたゲームオブジェクトは、ネットワーク上でそれらをスポーンする必要があるため、挙動が若干異なります。

When building your game, Unity disables all Scene-based GameObjects with Network Identity components. When a client connects to the server, the server sends spawn messages to tell the client which Scene GameObjects to enable and what their most up-to-date state information is. This ensures the client’s game does not contain GameObjects at incorrect locations when they start playing, or that Unity does not spawn and immediately destroy GameObjects on connection (for example, if an event removed the GameObject before that client connected).

プレビューペインの Network Information

このコンポーネントには、ネットワーク追跡情報が含まれ、その情報はプレビューウィンドウに表示されます。例えば、オブジェクトが割り当てられたシーン ID、ネットワーク ID、アセット ID などです。これにより、調査とデバッグに役立つ情報を検査することができます。

シーン ID は、NetworkIdentity コンポーネントを持つすべてのシーンオブジェクトで有効です。ネットワーク IDは、この特定のオブジェクトインスタンスの ID です。特定のプレハブからインスタンス化された複数のオブジェクトが存在することがありますが、ネットワーク ID を使用して、ネットワークの更新を適用するオブジェクトを識別します。アセット ID は、オブジェクトがインスタンス化された元のソースアセットを参照します。これは、特定のゲームオブジェクトのプレハブがネットワークを通してスポーンされるときに内部的に使用されます。

ランタイムには、ここにより多くの情報が表示されます (無効の NetworkBehaviour は太字になっていません)

プレビューペインの情報

プロパティ 説明
assetId (スポーンのために) このオブジェクトに関連付けられたプレハブを識別します。
clientAuthorityOwner このオブジェクトの権限を持っているクライアント。権限を持つクライアントがない場合は null。
connectionToClient NetworkIdentity に関連付けられた NetworkConnection。これは、サーバー上のプレイヤーオブジェクトのみに有効です。
connectionToServer NetworkIdentity に関連付けられた NetworkConnection。これは、ローカルクライアント上のプレイヤーオブジェクトのみに有効です。
hasAuthority このオブジェクトが権限を持つバージョンのオブジェクトである場合 (つまり、通常のオブジェクト にとってはサーバー、または、localPlayerAuthority を持つクライアントのどちらか) は True。
isClient オブジェクトがクライアント上で実行されている場合は True。
isLocalPlayer オブジェクトがローカルマシンのプレイヤーである場合は True。
isServer オブジェクトがサーバー上で実行され、スポーンされている場合は True。
localPlayerAuthority オブジェクトがクライアントによって制御されている場合は true (これは、クライアントに権限のあるローカルプレイヤーオブジェクトが該当し、この値は NetworkTransform のような他のコンポーネントで使用されます)。
netId スポーンされたときに割り当てられる、ネットワークセッションの固有の ID
observers このオブジェクトを見ることのできるクライアントの NetworkConnection のリスト (読み込み専用)
playerControllerId このオブジェクトに割り当てられているコントローラー ID (プレイヤーオブジェクトに対してのみ有効)
SceneId シーンのネットワーク化されたオブジェクトの固有の ID。これは再生モードでのみ設定されます。
serverOnly クライアント上でオブジェクトがスポーンされないようにするためのフラグ

NetworkIdentity

Network Discovery
Network Lobby Manager