Dynamic Asset Injection
developer@photonengine.com
。概述
資產插入附加元件是一組公用程式,組建於Quantum SDK的頂端,允許在模擬時確定性地新增資產(地圖、實體原型...)到Quantum的動態資料庫。
資產插入附加元件是一個常規的專案,包含一個參照執行方式。公用程式指令碼可以用於任何使用Quantum 2.1或更高版本的專案。
注意事項:
- 被插入到資料庫的資產可以在運行階段被建立(舉例而言,一個玩家建立一個地圖)。
- 動態資料庫是遊戲狀態的一部分,並且將作為快照的一部分被轉移到延遲加入者;因此對於延遲加入者不需要有額外的同步程式碼。
下載
版本 | 發布日期 | 下載 | ||
---|---|---|---|---|
2.1.0 | 2022年7月13日 | Quantum資產插入2.1.0組建10 |
Quantum
Quantum側的附加元件處理資產的壓縮,資產插入命令定義,及接收和插入資產到動態資料庫的系統。
壓縮
Quantum的內建壓縮公用程式用於已插入資料的壓縮,以減少透過命令來發送的資料數量。這是自動完成的。
插入資產命令
InjectAssetCommand
用於確定性地與其他玩家分享資料。一個單一的命令可以持有多達4 kB的資料。如果資料超過這個限制,資產將自動地分割為多個較小的區塊,並且在多個命令中發送。命令被伺服器附加到一個特定,這是在每個模擬幀只能接收一個命令的原因。這將導致一個延遲,因為模擬需要等待一定數量的刷新,其數量相等於命令被分割而成的部分的數量。
插入系統
InjectAssetSystem
處理InjectAssetCommands
並且插入資產到Quantum的動態資料庫之中。如果一個資產透過多個命令被發送,InjectAssetSystem
儲存來自各個部分的命令的資料區塊。當接收所有的部分之後,資產被重組及插入到資料庫之中。
Unity
Unity側的專案顯示了發送命令的方式。
透過命令來發送資產
AssetInjectionUtility
用於發送任何類型的,插入到模擬的動態資料庫的Quantum資產。簡單地以所需的參數來調用InjectAsset()
方法,而AssetInjectionUtility
將處理剩下的事情——包含在需要的時候分割大的資料為多個命令。
C#
public static void InjectAsset(QuantumGame game, PlayerRef player, string assetName, byte[] data);
特殊資產
在與Quantum共同工作時的兩個常見的特殊資產是地圖及實體原型資產。為了促進這些類型的資產的序列化及還原序列化,已經提供兩個額外的公用程式:
MapUtlity
可以用於從模擬資產來建立Unity資產。PrototypeUtility
可以用於實體原型的序列化/還原序列化。
舉例而言,這些公用程式可以用於處理作為使用者生成的內容的實體原型。
允許誰來插入資產?
一般而言,任何人都可以發送一個InjectAssetCommand
以插入任何類型的資產到資料庫。在附加元件套件中提供的示例之中,任何人都可以插入一個地圖資產,但是只有一個特定玩家可以 啟用 新的地圖。
如果應該在某種程度上限制插入或操控已插入的資產,被允許這麼做的玩家必須在模擬中被確定性地識別為可以這樣做的玩家。舉例而言,可以在各個玩家的RuntimePlayer
中設定一個旗標,以指定是否允許它們在動態資料庫中插入和/或操控資產。
插入資產確定性地被生成資產
在確定性地被建立資產的情形,比如從一個Quantum之中的一個種子來確定性地被生成的地圖,可以從模擬之中直接插入資產到DB,而不需要透過命令來發送它。
已知限制
如果資產含有一個參照到另一個資產(其還沒有在DB之中),被參照的資產也必須被插入;取決於使用案例,被參照的資產必須在資產參照它之前被插入。
Back to top