重要: 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 が割り当てられます。
ランタイムにネットワークシステムによってスポーンされたプレハブにはすべて、Network Identity コンポーネントを設定する必要があります。詳細については、ゲームオブジェクトのスポーン を参照してください。
また、シーンの一部として保存したゲームオブジェクト (周辺的小道具など) をネットワーク化することもできます。ネットワーク化されたゲームオブジェクトは、ネットワーク上でそれらをスポーンする必要があるため、挙動が若干異なります。
ゲームを構築するとき、Unity は Network Identity コンポーネントを持つすべてのシーンベースのゲームオブジェクトを無効にします。クライアントがサーバーに接続すると、サーバーはスポーンメッセージを送信して、どのシーンのゲームオブジェクトを有効にするか、そして、最新の状態情報をクライアントに通知します。これにより、ゲームを開始するときやクライアントのゲームで、ゲームオブジェクトが誤った場所に配置されないようにします。または、接続時にスポーンされずに、即座にゲームオブジェクトが破棄されることもあります (例えば、クライアントが接続する前に、イベントによってゲームオブジェクトが破棄された場合など)。 詳細については、ネットワーク化されたシーンのゲームオブジェクト を参照してください。
このコンポーネントには、ネットワーク追跡情報が含まれ、その情報はプレビューウィンドウに表示されます。例えば、オブジェクトが割り当てられたシーン 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 | クライアント上でオブジェクトがスポーンされないようにするためのフラグ |