实体组件系统

什么是实体-组件-系统?

实体-组件-系统(ECS)是一种架构模式。这种模式广泛用于游戏应用程序开发。ECS遵循组合优于继承的原则,这提供了更好的灵活性,并帮助您识别实体,其中游戏场景中的所有对象都被视为实体。

ECS编程是一种默认提供高性能的编码方法。

该系统由三个术语组成。

  1. 实体
  2. 组件
  3. 系统

让我们详细学习这个概念

在本实体-组件系统教程中,您将学到

什么是实体?

实体是代表模拟空间中某个参与者的独立对象。它没有实际的数据或行为。组件赋予实体数据。它通常是一个结构体或字典。

例如,如果我们正在模拟游戏宇宙Minecraft,游戏宇宙中所有可见、有形的事物都算作实体。

什么是组件?

组件是归属于实体的单一行为。组件的名称最好能传达实体将要表现出的行为。然而,组件本身没有任何行为。它们是附加到实体上的可重用模块。组件提供外观、行为和功能。

所有逻辑都通过组件实现,这有助于您通过混合和配置组件来定义不同类型的对象。

什么是系统?

系统将迭代许多组件来执行低级

功能,例如渲染图形、执行物理

计算或寻路。它为组件类提供全局范围、管理和服务。

但是,系统不是可选的,但我们可以使用它们来分离逻辑和数据。它还有助于您处理逻辑组件,充当数据容器。

示例

  • 重力(速度)- 它有助于您因重力而加速速度
  • 它将速度添加到位置
  • 根据 AI 代理设置由机器人控制的实体输入
  • 渲染(位置、精灵)- 绘制精灵
  • 玩家控制(输入玩家)- 帮助您根据控制器设置玩家控制的实体输入。

组合

组合是您可以附加更多组件以添加额外外观、行为或功能的元素。您还可以更新组件值以配置实体。

ECS的优势

以下是ECS在编程中的优势

  • 您可以创建更短、更简单的代码。
  • 非常灵活的涌现行为。
  • 它为 3D 和 VR 开发提供了架构。
  • 使非技术人员可以通过行为进行脚本编写。
  • 它有助于您划分单体类。
  • 易于复用和组合。
  • 便于单元测试和模拟。
  • 它允许您构建复杂程度的 VR 应用程序。
  • 在运行时用模拟组件替换组件。
  • 它有助于您扩展新功能。
  • ECS是一种友好的并行处理和多线程方法,
  • 帮助您将数据与其作用的函数分离
  • 通过混合可重用部件,在定义对象时提供更好的灵活性。
  • 它通过解耦、封装、模块化、可重用等方法提供了清晰的设计。

使用ECS的缺点

以下是使用ECS的一些缺点

  • 不如 MVC 等其他模式那样明确定义。
  • 难以正确应用,容易误用。好的组件需要更多地考虑设计。
  • ECS 要求编写许多小型系统,这些系统会迭代可能数量庞大的实体,从而增加了编写非常低效代码的风险。
  • 大多数人甚至从未听说过这种模式。

实体组件系统示例

让我们看看兔子的例子

看到这些组件周围的虚线框。那就是兔子实体——只是组件的容器。您也可以将实体定义为任何组件子集的聚合。

您可以看到上面给出的图像。它是兔子实体之一——只不过是组件的容器。您可以将实体定义为任何组件子集的聚合,例如胡萝卜。

ECS中的数据流

ECS 模型中的系统行为是从一个状态到另一个状态的改变。

让我们通过这个例子来理解

行为:“树上的兔子因重力而坠落。”

如何实现上述行为?

您可以使其 z 值大于 0,然后随时间减小到 0。

行为:“生物会衰老。”

让我们看看如何实现这种行为?

您可以让生物组件具有年龄值,该值会随时间增加。

摘要

  • 实体-组件-系统(ECS)是一种架构模式。
  • 实体是代表模拟空间中某个参与者的独立对象。
  • 组件是归属于实体的单一行为。
  • 系统将迭代许多组件来执行低级功能,例如渲染图形、执行物理计算或寻路。
  • 组合是您可以附加更多组件以添加额外外观、行为或功能的元素。
  • 通过使用 ECS 模式,您可以创建更短、更简单的代码。
  • 它不像 MVC 等其他模式那样明确定义。
  • ECS 模型中的系统行为是从一个状态到另一个状态的改变。