Entity Prototypes
概述
為了協助由資料驅動的設計,Quantum 2.0引入 實體原型。
一個 實體原型 是一個實體的被序列化的版本,其包含:
- 組合(比如,它由哪些部件組成);以及,
- 資料(比如,元件的屬性及它們的初始值)。
這允許資料及行為之間的一個乾淨的分離,同時讓設計師可以調校前者,而不需要程式設計師持續地編輯後者。
設定一個原型
實體原型可在Unity編輯器中被設定。
基礎
為了建立一個 實體原型,簡單地新增 實體原型 指令碼到任何遊戲物件。
實體原型 指令碼允許您針對最常使用的2D及3D元件,來設定及定義參數。
- 轉換(針對2D,包含轉換2D垂直)
- 物理碰撞器
- 物理主體
- 導航網格路徑尋找器
- 導航網格轉向代理
- 導航網格迴避代理
尊重針對與物理及導航網格相關的代理的相依性。
如需取得更多資訊,請閱讀它們各自的文檔。
自訂元件
可新增額外的元件到一個 實體原型,其透過:
- 新增實體元件 下拉式清單;或是,
- 常規的Unity 新增元件 按鍵,透過搜尋正確的 實體元件。
關於集合的注意事項
元件中的動態集合,只 在 至少有一個項目在它們之中的情況下,被自動地分配。不然,集合將必須被手動分配。如需取得更多關於這個主題的資訊,請參見在DSL頁面上的動態集合輸入項目.
階層
在ECS中,實體/遊戲物件階層的概念並不存在。此實體原型不支援階層或巢狀。
雖然子原型並沒有直接被支援,您可以:
- 在場景中建立分離的原型,並且內嵌它們。
- 透過在一個元件中保有一個參照來連接它們。
- 手動地更新「子原型」的位置。
請注意: 沒有內嵌到場景中的原型,將必須遵循一個不同的工作流程,其中實體在程式碼中被建立及連接。
您可以在物件(檢視)中有階層,然而在實體(模擬)中的階層需要由您處理。
建立/具現化一個原型
當一個 實體原型 已經在Unity中被定義,有許多方法可以將其包含在模擬之中。
被內嵌於場景/地圖之中
如果 實體原型 作為一個Unity場景的一部分被建立,它將被內嵌到相對應的地圖資產。被內嵌的 實體原型 將在地圖時被載入,並透過它被內嵌的值來被具現化。
請注意: 如果一個場景的 實體原型 被編輯,或是其值被修改,地圖資料必須被重新內嵌。
在程式碼中
為了從一個 實體原型 建立一個新的實體,您需要遵循以下步驟:
- 建立一個遊戲物件的Unity預製件,其帶有 實體原型 指令碼。
- 將預製件放到
Resources\DB
之中。
- 重新整理Quantum資料庫
Quantum -> Generate Asset Resources
。 - 讓 實體原型 資產 路徑或GUID在您的模擬中可用。
- 透過幀來調用
Create()
,並且發送如實體原型參照,或是它的一個執行個體:
C#
void CreateExampleEntity(Frame f){
// using a reference
var exampleEntity = f.Create(myPrototypeReference);
// OR, getting an instance before, using the asset's path as a parameter, and then creating the entity
var entityPrototype = f.FindAsset<EntityPrototype>("Resources/DB/Prefabs/Example|EntityPrototype");
var exampleEntity = f.Create(entityPrototype);
}
注意事項
在場景中呈現的 實體原型 被內嵌到 地圖資產,同時被預製的 實體原型 是個別的 資產,其為Quantum資產資料庫的一部分。
實體檢視
在Unity中 實體檢視 對應到一個實體的視覺效果。
在由資料驅動的設計的精神中,一個 實體原型 可以包含其 檢視 元件,或指向一個分離的 實體檢視 資產。
自身
為了設定一個 實體原型 的檢視到自身,簡單地新增 實體檢視 元件到它。
當已經新增元件,*實體原型* 指令碼將列出 **自身** 作為 *檢視* 參數的值。這也將在同樣的預製件中建立一個巢狀的 *實體檢視* **資產**。從原型分離
為了設定及連接一個從 實體原型 資產分離的檢視:
- 新增 實體檢視 到您希望代表檢視的遊戲物件。
- 預製帶有 實體檢視 的遊戲物件。
- 將預製件放到
Resources\DB
之中,這將建立一個巢狀於預製件之中的 實體檢視 資產。
- 重新整理資料庫
Quantum -> Generate Asset Resources
。 - 以新建立的 實體檢視資產 從 實體原型 連接 檢視 欄位。這可以透過拖放或是Unity內容搜尋選單來完成。
重要事項
為了讓一個 實體檢視 在Unity中可見,場景必須有一個EntityViewUpdater
指令碼。