Entity Prototypes
概述
為了實現數據驅動設計,Quantum 提供了實體原型功能。
Quantum 實體原型是一個序列化的實體版本,包含以下內容:
- 組成(即由哪些組件構成);以及,
- 數據(即組件的屬性及其初始值)。
這使得數據和行為可以清晰分離,同時讓設計師能夠調整數據,而無需程序員不斷修改行為。
設置原型
實體原型可以在 Unity 編輯器中設置。
基本設置
要創建實體原型,請在任何 GameObject 上添加QuantumEntityPrototype
組件。

QuantumEntityPrototype
腳本允許設置和定義 2D 和 3D 中最常用的組件參數:
- Transform(包括 2D 的 Transform2DVertical);
- PhysicsCollider;
- PhysicsBody;
- NavMeshPathFinder;
- NavMeshSteeringAgent;
- NavMeshAvoidanceAgent.
物理和 NavMesh 相關代理的依賴關係會被尊重。
更多信息,請閱讀它們各自的文檔。
自定義組件
可以通過以下方式為實體原型添加額外組件:
- 在
Entity Components
列表中點擊 + 按鈕; - 使用 Unity 的 Add Component 按鈕,搜索對應的
QPrototype
組件。
關於集合的注意事項
組件中的動態集合 僅在 原型中至少有一個項目時才會自動分配。否則,必須手動分配集合。更多信息,請參考 DSL 頁面中的動態集合條目。
層級結構
在 ECS 中,不存在實體/GameObject 層級結構的概念。因此,實體原型不支持層級結構或嵌套。
雖然子原型不直接支持,但您可以:
- 在場景中創建獨立的原型並烘焙它們;
- 通過在組件中保留引用來鏈接它們;
- 手動更新「子」實體的位置。
注意: 未在場景中烘焙的原型需要遵循不同的工作流程,即通過代碼創建和鏈接實體。
可以在遊戲對象(視圖)中實現層級結構,但在實體(模擬)中的層級結構需要自行處理。
創建/實例化原型
在 Unity 中定義實體原型後,有多種方式可以將其加入模擬中。
烘焙到場景/地圖中
如果實體原型是作為 Unity 場景的一部分創建的,它將被烘焙到對應的地圖資源中。烘焙後的實體原型將在地圖初始化時加載,並使用烘焙時的值。
注意: 如果場景中的實體原型被編輯或值被更改,必須重新烘焙地圖數據(根據項目設置,某些編輯器操作如保存項目可能會自動完成此操作)。
通過代碼
要從QuantumEntityPrototype
創建新實體,請按照以下步驟操作:
- 為帶有
QuantumEntityPrototype
組件的 GameObject 創建 Unity 預製體; - 將預製體放置在
QuantumEditorSettings
資源的Asset Search Paths
中包含的任何文件夾中(默認包含整個Assets
文件夾):

這將自動生成一個與預製體關聯的EntityPrototype
資源,如上圖所示。
- 在編輯器中,可以通過類型為
AssetRef<EntityPrototype>
的字段引用此類EntityPrototype
資源。這是通過模擬代碼創建實體時引用原型的一種方式,同時引用方式類似於 Unity 中常用的拖放或從資源列表中選擇。
舉例來說,下圖展示了通過RuntimePlayer
類中已聲明的字段進行引用的示例:

- 使用
frame.Create()
從原型創建實體。通常通過傳遞對上述資源的引用完成,但也有其他重載方式:
C#
void CreateExampleEntity(Frame frame) {
// Using a reference to the entity prototype asset
var exampleEntity = frame.Create(myPrototypeReference);
}
注意
場景中的實體原型會被烘焙到 地圖資源 中,而預製化的實體原型則是 Quantum 資源數據庫中的獨立 資源。
重命名組件/原型
重命名生成的組件時,實體原型的 Unity 腳本也會隨之改變,這可能導致 Unity 預製體失去與原型腳本的連接,因為它們的腳本 GUID 發生了變化。
可以使用FormerlyNamed
屬性安全地重命名組件:
- 添加
FormerlyNamed
屬性以開始重命名- 如果使用 Quantum SDK 3.0.3 之前的版本,請添加前綴
QPrototype..
:FormerlyNamed("QPrototypeOldComponentName")
- 如果使用 Quantum SDK 3.0.3 之前的版本,請添加前綴
- CodeGen 將自動遷移腳本 GUID
Qtn
[FormerlyNamed("OldComponentName")]
component NewComponentName {
}
Quantum 實體視圖
QuantumEntityView
對應於實體的可視化表示。
在數據驅動設計的理念下,Quantum 實體原型可以包含其View
組件,也可以指向獨立的EntityView
資源。
自身視圖
要將實體原型的視圖設置為自身,只需為其添加QuantumEntityView
組件。


獨立於原型
要設置並鏈接獨立於 Entity Prototype 資源的視圖:
- 在表示視圖的 GameObject 上添加
QuantumEntityView
; - 為該 GameObject 創建預製體;
- 這將在預製體中創建一個嵌套的 Entity View 資源。

- 從未關聯
QuantumEntityView
的 Entity Prototype 中鏈接 View 字段,引用新創建的 Entity View 資源。可以通過拖放或使用 Unity 上下文搜索菜單完成。

重要提示
要讓 Entity View 在 Unity 中可見,場景中必須包含QuantumEntityViewUpdater
腳本。