動的に生成するオブジェクトは NetworkServer.Spawn() を使用してネットワークに追加しますが、すでにシーン内に存在するオブジェクトは処理が異なります。こういったオブジェクトはクライアントとサーバーの両方にシーンと共にロードされ、オブジェクト生成メッセージが送られる前にランタイムで存在していることになります。
シーン内の、NetworkIdentity コンポーネントのあるすべてのオブジェクトは、クライアントおよびサーバーの両方において、シーンがロードされる際に無効になります。そしてシーンが完全にロードされると、これらのネットワーク上のシーンオブジェクトをアクティベートするために NetworkServer.SpawnObjects() が呼び出されます。これは、サーバーのシーンのロードが完了すると NetworkManager によって自動的に行われますが、ユーザーコードで直接呼び出すことも可能です。この結果、ネットワーク上のシーンオブジェクトは特殊な方法で生成されることになります― 新しいインスタンスが作成される代わりに、既存のインスタンスがネットワークに繋がれることになります。
動的に生成されたオブジェクトの代わりにシーンオブジェクトを使用するのには理由があります。これらのオブジェクトは:
NetworkServer.SpawnObjects() によって一度生成されたシーンオブジェクトの挙動は、その他の生成オブジェクトと同様になります。アップデートが送られ、ClientRPC コールが行われます。
クライアントがゲームに参加する前にシーン内のオブジェクトがサーバー上で破棄されると、そのオブジェクトはその先、そのクライアント上では一切生成されません。
ネットワーク上のシーンオブジェクトは、ネットワークが開始されると無効化されます。シーン内にあるシーンオブジェクトで NetworkIdentity を持つものはすべて、ネットワーク上のシーンオブジェクトです。
サーバー上で、これらのオブジェクトは、NetworkServer.SpawnObjects() が呼び出されると有効化されます。つまりサーバーが起動された時、あるいはシーンのサーバーへのロードが終了した時です。接続されたクライアントは、そのクライアントから見えるサーバー上のシーンオブジェクトのひとつひとつに関して ObjectSpawnScene オブジェクト生成メッセージを受け取ります。このメッセージによってクライアント上のオブジェクトが有効化されます。またこのメッセージは、サーバーにおけるそのオブジェクトの最新の状態を持っています。従って、クライアント上でアクティベートされるのは、そのクライアントから見えるクライアントでサーバー上で破棄されていないもののみになります。また、通常の非シーンオブジェクト同様、これらのシーンオブジェクトも、クライアントがゲームに参加した時点で最新の状態からスタートします。