实体组件系统
什么是实体-组件-系统?
实体-组件-系统(ECS)是一种架构模式。这种模式广泛用于游戏应用程序开发。ECS遵循组合优于继承的原则,这提供了更好的灵活性,并帮助您识别实体,其中游戏场景中的所有对象都被视为实体。
ECS编程是一种默认提供高性能的编码方法。
该系统由三个术语组成。
- 实体
- 组件
- 系统
让我们详细学习这个概念
在本实体-组件系统教程中,您将学到
什么是实体?
实体是代表模拟空间中某个参与者的独立对象。它没有实际的数据或行为。组件赋予实体数据。它通常是一个结构体或字典。
例如,如果我们正在模拟游戏宇宙Minecraft,游戏宇宙中所有可见、有形的事物都算作实体。
什么是组件?
组件是归属于实体的单一行为。组件的名称最好能传达实体将要表现出的行为。然而,组件本身没有任何行为。它们是附加到实体上的可重用模块。组件提供外观、行为和功能。
所有逻辑都通过组件实现,这有助于您通过混合和配置组件来定义不同类型的对象。
什么是系统?
系统将迭代许多组件来执行低级
功能,例如渲染图形、执行物理
计算或寻路。它为组件类提供全局范围、管理和服务。
但是,系统不是可选的,但我们可以使用它们来分离逻辑和数据。它还有助于您处理逻辑组件,充当数据容器。
示例
- 重力(速度)- 它有助于您因重力而加速速度
- 它将速度添加到位置
- 根据 AI 代理设置由机器人控制的实体输入
- 渲染(位置、精灵)- 绘制精灵
- 玩家控制(输入玩家)- 帮助您根据控制器设置玩家控制的实体输入。
组合
组合是您可以附加更多组件以添加额外外观、行为或功能的元素。您还可以更新组件值以配置实体。
ECS的优势
以下是ECS在编程中的优势
- 您可以创建更短、更简单的代码。
- 非常灵活的涌现行为。
- 它为 3D 和 VR 开发提供了架构。
- 使非技术人员可以通过行为进行脚本编写。
- 它有助于您划分单体类。
- 易于复用和组合。
- 便于单元测试和模拟。
- 它允许您构建复杂程度的 VR 应用程序。
- 在运行时用模拟组件替换组件。
- 它有助于您扩展新功能。
- ECS是一种友好的并行处理和多线程方法,
- 帮助您将数据与其作用的函数分离
- 通过混合可重用部件,在定义对象时提供更好的灵活性。
- 它通过解耦、封装、模块化、可重用等方法提供了清晰的设计。
使用ECS的缺点
以下是使用ECS的一些缺点
- 不如 MVC 等其他模式那样明确定义。
- 难以正确应用,容易误用。好的组件需要更多地考虑设计。
- ECS 要求编写许多小型系统,这些系统会迭代可能数量庞大的实体,从而增加了编写非常低效代码的风险。
- 大多数人甚至从未听说过这种模式。
实体组件系统示例
让我们看看兔子的例子
看到这些组件周围的虚线框。那就是兔子实体——只是组件的容器。您也可以将实体定义为任何组件子集的聚合。
您可以看到上面给出的图像。它是兔子实体之一——只不过是组件的容器。您可以将实体定义为任何组件子集的聚合,例如胡萝卜。
ECS中的数据流
ECS 模型中的系统行为是从一个状态到另一个状态的改变。
让我们通过这个例子来理解
行为:“树上的兔子因重力而坠落。”
如何实现上述行为?
您可以使其 z 值大于 0,然后随时间减小到 0。
行为:“生物会衰老。”
让我们看看如何实现这种行为?
您可以让生物组件具有年龄值,该值会随时间增加。
摘要
- 实体-组件-系统(ECS)是一种架构模式。
- 实体是代表模拟空间中某个参与者的独立对象。
- 组件是归属于实体的单一行为。
- 系统将迭代许多组件来执行低级功能,例如渲染图形、执行物理计算或寻路。
- 组合是您可以附加更多组件以添加额外外观、行为或功能的元素。
- 通过使用 ECS 模式,您可以创建更短、更简单的代码。
- 它不像 MVC 等其他模式那样明确定义。
- ECS 模型中的系统行为是从一个状态到另一个状态的改变。