NetworkDiscovery
Network Lobby Manager

NetworkIdentity

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 クライアント上でオブジェクトが生成されないようにするためのフラグ

ヒント

  • 生成するためのプレハブ上に NetworkIdentity をアタッチします。
  • NetworkIdentity は、ネットワークで扱うすべてのオブジェクトに必要です。
NetworkDiscovery
Network Lobby Manager