場景物件

動態被產生的物件都是由 NetworkServer.Spawn() 方法加到網路中,但是已存在場景上的物件是以不同的方式去控制。這些物件會在伺服器端和客戶端中隨著場景被載入,並在任何產生 (Spawn) 訊息被送出之前存在於執行期中。

在伺服器端和客戶端中,場景已經載入的時候,其中掛有 NetworkIdentity 組件的物件會被關閉。之後,當場景完全被載入之後, NetworkServer.SpawnObjects() 會被呼叫來啟動這些有網路機制的場景物件。當伺服器場景完成載入—或是被使用者的程式碼呼叫時,這些事情會自動地被 NetworkManager 完成。這造成帶有網路機制的場景物件,會以特殊的方式被產生 — 取代新實體被產生的方式,存在中的實體會被掛勾於網路上。

這裡有一些好的理由來使用場景物件,而不是動態產生物件。這些物件是:

  • 隨著場景被載入,所以不須在執行期時被中斷。
  • 可以有一些和預製物件 (Prefab) 不相同的特殊改動。
  • 可以被其他在同場景下的物件實體當作參考,可以避免在執行期中去尋找並掛勾他們。

一但場景物件藉由 NetworkServer.SpawnObjects() 被產生之後,它們會像其他被產生的物件一樣。更新會被送出,而且 ClientRPC 訊息也可被產生。

假如場景中的物件,在客戶端加入遊戲前被刪除的話; 它將不會在新加入的客戶端中被產生。

帶有網路機制的場景物件會在啟動網路的時候被關閉。任何掛有NetworkIdentity 的場景物件都是網路場景物件。

在伺服器端上,當啟動或是場景完成載入時,這些物件會在 NetworkServer.SpawnObjects() 被呼叫時啟動。當客戶端連接時,客戶端會接收到在伺服器端上存在的每個場景物件,而且也在客戶端中可見,所傳來的 ObjectSpawnScene 產生訊息。這些訊息造成在客戶端中的物件會被啟用,並擁有從伺服器端得來的最新狀態。所以只有客戶端物件是可見,而且在伺服器端沒被移除的話,將會在客戶端中被啟用。 而且像一般的非場景物件,這些場景物件在客戶端加入遊戲的時候,將會以最新狀態啟動。

results matching ""

    No results matching ""