NetworkIdentity コンポーネントは、ネットワークシステムの心臓部分と言えます。このコンポーネントは「AddComponents -> Network -> NetworkIdentity」でオブジェクトにアタッチできます。NetworkIdentity は、オブジェクトのネットワーク ID を扱い、ネットワークシステムで管理するために使用されます。インスペクターでは以下のように表示されます。
Unity のネットワークシステムの1つであるサーバー権限を持つシステムでは、NetworkServer.Spawn() を使用してサーバー側で NetworkIdentity コンポーネントを持つネットワークオブジェクトを生成しなければいけません。NetworkInstanceId が割り当てられている場合、サーバーに接続されているすべてのクライアント上でネットワークオブジェクトが生成されます。
シーンのオブジェクトは、動的にインスタンス化するオブジェクトとは少し異なった処理が行われます。これらのオブジェクトはすべて、クライアントとサーバーの両方で、シーンに存在しています。ただし、ゲームをビルドするときには、ネットワーク ID を持つすべてのシーンオブジェクトは無効になっています。クライアントがサーバーに接続するとき、サーバーはクライアントにどのシーンオブジェクトを有効にすべきかや、その最新の状態の情報をメッセージを生成して伝えます。いくつかのイベントがクライアントが接続する前に不要なオブジェクトはすぐ削除されます。“Server Only” のチェックボックスは、これにより、再生を開始したときに、クライアントは誤った場所に置かれたオブジェクトを含まないようにします。または、いくつかのイベントはクライアントが接続される前にオブジェクトを削除するため、オブジェクトは接続とともにすぐに削除されます。Server Only にチェックすると、特にそのオブジェクトがクライアント上で生成されたり有効になったりしないようにします。
Local Player Authority 設定を使用すると、このオブジェクトを所有するクライアントが、権限を持つローカルプレイヤーオブジェクトを制御できるようになります。この機能は、NetworkTransform などの他のコンポーネントによって、使用されます。
このコンポーネントは、オブジェクトに割り当てられているシーン ID、ネットワーク ID、アセット ID のような情報を追跡する機能が含まれています。シーン ID は、NetworkIdentity コンポーネントがアタッチされているすべてのシーンオブジェクトに対して有効な数値が割り当てられます。ネットワーク ID は、特定のオブジェクトのインスタンスに対して ID が割り当てられます。これはオブジェクトが複数インスタンス化(複製など)したときに、正しくオブジェクトを識別するために使用されます。アセット ID は、アセットからインスタンス化されたオブジェクトに対して ID が割り当てられます。これは特定のオブジェクトをプレハブから、ネットワーク経由で生成するときに内部で使用されます。この情報はインスペクターのプレビュー部分に表示されています。
ランタイムには、ここにより多くの情報が表示されます (無効の NetworkBehaviour は太字になっていません)
プロパティー | 機能 |
---|---|
assetId | (スポーンのために) このオブジェクトに関連付けられたプレハブを識別します。 |
clientAuthorityOwner | このオブジェクトの権限を持っているクライアント。権限を持つクライアントがない場合は null。 |
connectionToClient | この NetworkIdentity に割り当てられている接続 (サーバー上にいる有効なプレイヤーオブジェクトに対してのみ有効です) |
connectionToServer | この NetworkIdentity に関連付けられた UConnection。これはローカルクライアント上のプレイヤーオブジェクトのみを有効にします。 |
hasAuthority | オブジェクトが正式なバージョンである場合は true (サーバー上かクライアント上かを判断するには、localPlayerAuthority を使用します) |
isClient | オブジェクトがクライアント上で実行されている場合は True。 |
isLocalPlayer | オブジェクトがローカルマシンのプレイヤーである場合は True。 |
isServer | オブジェクトがサーバー上で実行され、スポーンされている場合は True。 |
localPlayerAuthority | オブジェクトがクライアントによって制御されている場合は true (これは、クライアントに権限のあるローカルプレイヤーオブジェクトが該当し、この値は NetworkTransform のような他のコンポーネントで使用されます)。 |
netId | スポーンされたときに割り当てられる、ネットワークセッションの固有の ID |
observers | このオブジェクトを見ることのできるクライアントの NetworkConnection のリスト (読み込み専用) |
playerControllerId | このオブジェクトに割り当てられているコントローラー ID (プレイヤーオブジェクトに対してのみ有効) |
sceneId | シーン内のネットワークオブジェクトのユニークな ID (これは再生中のみ割り当てられます) |
serverOnly | クライアント上でオブジェクトがスポーンされないようにするためのフラグ |