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 | (オブジェクト生成のために)このオブジェクトに割り当てられたプレハブのアセット ID |
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 | クライアント上でオブジェクトが生成されないようにするためのフラグ |