在为引擎设计实体组件系统时,我在存储和检索特定类型的组件方面遇到了一些麻烦。
首先,让我澄清一下我将在此问题中使用的一些术语:
- 我将“ 组件 ”称为一种数据结构,用于存储特定系统的相关数据。
- 我称“ 系统 ”为方法和数据结构的聚合,它利用组件来更新与用户的游戏状态/界面。
- “ 实体 ”基本上只是一个ID,用于检索游戏逻辑中的特定组件并修改其数据。
每个系统都拥有其组件类型(例如Physics-> PhysicsComponent,AI-> AIComponent,Rendering-> RenderingComponent)的(ID映射)数组,因此它可以有效地遍历数据。
但是,并非所有组件都专门由系统拥有。例如,“变换”组件存储对象的位置,旋转和比例。它是实体最重要的部分之一(Unity甚至使它成为强制性的),因为它被许多系统使用,例如物理,AI,渲染等。
这几乎就是我面临的问题。由于其他许多系统都使用了Transform,因此我应该如何为每个组件检索一个?我看到的一种可能的解决方案是使每个组件存储自己的实体ID。这样检索任何组件很容易,但是效率不高,而且它与组件的概念相反,后者是孤立的独立数据束,不知道其他任何组件。
是否有解决此问题的正确方法?变形应该成为一个组成部分吗?