重要: UNet は非推奨のソリューションになり、現在、新しい Multiplayer とネットワーキングソリューション (Netcode for GameObjects) が開発中です。詳細は、GameObjects Web サイトの Unity Netcode を参照してください。 |
NetworkIdentity コンポーネントは、Unity ネットワーク高レベル API システムの心臓部分と言えます。このコンポーネントはネットワーク上のゲームオブジェクトの固有の ID を管理し、ネットワークシステムにゲームオブジェクトを認識させるために ID を使用します。
プロパティ | 機能 |
---|---|
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).
このコンポーネントには、ネットワーク追跡情報が含まれ、その情報はプレビューウィンドウに表示されます。例えば、オブジェクトが割り当てられたシーン 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 | クライアント上でオブジェクトがスポーンされないようにするためのフラグ |