实体组件系统

什么是实体组件系统?

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

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

这个系统由三个术语组成。

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

让我们详细了解这个概念:

在本实体组件系统教程中,您将学习:

什么是实体?

实体是代表模拟空间中参与者的独特对象。它没有实际数据或行为。此组件为实体提供数据。它通常是支柱或字典。

例如,如果我们模拟一个游戏的世界 我的世界,游戏宇宙中所有看得见、摸得着的‘东西’都算作实体。

什么是组件?

组件是赋予实体的单一行为。元素的名称理想情况下应该传达实体将表现出的行为。但是,组件本身没有行为。它们是附加到实体的可重复使用模块。组件提供外观、行为和功能。

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

什么是系统?

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

渲染图形、执行物理等功能

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

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

例子

  • 重力(速度)——它可以帮助你在重力作用下加速
  • 它增加了位置的速度
  • 根据 AI 代理设置机器人控制实体的输入
  • 渲染(位置、精灵)——绘制精灵
  • 玩家控制(输入玩家)帮助您根据控制器设置玩家控制实体的输入。

组成成分

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

ECS的优势

使用 ECS 进行编程有以下优点:

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

使用 ECS 的缺点

以下是使用 ECS 的一些缺点

  • 不像 MVC 等其他模式那样具体定义。
  • 难以正确应用,容易误用好的组件需要更多的设计思考
  • ECS 需要编写许多小型系统,这些系统可能会对大量实体进行头韵处理,这会产生编写效率极低的代码的风险
  • 大多数人甚至从未听说过这种模式。

实体组件系统示例

让我们看看兔子的例子:

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

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

ECS中的数据流:

系统行为是 ECS 模型从一种状态转变为另一种状态。

让我们用这个例子来理解:

行为:“一只坐在树上的兔子因重力而跌倒。”

如何实现上述行为?

您可以通过使 z 值大于 0 来实现这一点,并且 z 值会随着时间的推移逐渐减小到 0。

行为:“生物会衰老。”

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

您可以使生命组件具有年龄值,并且年龄值会随着时间的推移而增加。

概要:

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

总结一下这篇文章: