Network Object State IL Weaving
概述
為了在編寫已連網程式碼時保持簡單性,Photon Fusion管理網路物件屬性和同儕節點之間同步的內部緩衝區之間的所有底層互動。這是透過重寫額外程式碼並在編譯過程中生成的IL程式碼中直接包含額外程式碼來實現的,這一步驟稱為IL編織。
IL(中間語言)編織過程涉及修改程式的編譯IL程式碼,以插入額外的功能或行為。在此背景下,Fusion IL Weaver負責在編譯過程中新增網路處理程式碼來增強網路行為中的已連網屬性。這包括值壓縮/解壓縮、驗證,更重要的是,從已連網緩衝區讀取/寫入。
編織過程確保了網路邏輯無縫整合到編譯的程式碼中,從而實現了網路屬性的正確功能,這些屬性的行為與正常屬性相似,但其值是同步的。
Fusion IL Weaving的另一個作用是解析/處理專案中描述的所有RPC方法,透過掛接到叫用行程,在調用端和執行端之間發送/接收資料,使它們按預期運行。
設定與執行
在NetworkProjectConfig
資產(描述了Photon Fusion的大多數設定)中,有一個名為Weaver Settings
的部分,包含以下設定:
Assemblies to Weave
:這是Fusion將查找NetworkBehavior
實作,以處理其所有Network Properties
的所有編譯元件的清單。這有助於透過刪除不包含任何NetworkBehavior
的元件,來增加編譯後時間。UseSerializableDictionary
:使用Fusion.SerializableDictionary
以存儲[Networked]
字典屬性初始值。如果未勾選,編織器將發出System.Generic.Dictionary
,是一種不可Unity序列化的類型,但自訂序列化器(例如Odin)可能支援它。NullChecksForNetworkedProperties
:如果設定,編織器將向每個NetworkBehaviour
上的所有[Networked]
屬性新增一個檢查,以驗證是否已附加所屬的NetworkObject
。CheckRpcAttributeUsage
:如果設定了,則編織器將檢查是否在不支援它的類型中使用了RpcAttribute
。這需要掃描所有類型,並可能增加編織持續時間。CheckNetworkedPropertiesBeingEmpty
:如果設定,編織器將檢查[Networked]
屬性的取得器和設定器是否為空。
IL編織過程主要發生在兩種情況下:
- 自動:Unity檢測到專案程式碼中的任何更改後,將觸發編織過程。
- 手動:在某些罕見的情況下,可能需要手動運行Fusion Weaver。對於這種情況,有一個
Tools/Fusion/Run Weaver
功能表項目可以觸發它。