实体组件系统

⚡ 智能摘要

实体-组件-系统(Entity-Component-System,简称ECS)是一种广泛应用于游戏开发的架构模式。它强调组合而非继承:实体是标识符,组件保存数据,系统则包含作用于具有匹配组件的实体的逻辑。

  • 🎮 ECS模式: 实体组件系统(Entity-Component-System)是游戏开发中常见的一种架构模式。
  • 🧩 组成: ECS 倾向于组合而非继承,以获得更大的灵活性。
  • 🆔 实体: 实体是游戏对象的通用标识符。
  • 📦 成分: 组件是一个纯数据容器,不包含任何行为。
  • ⚙️ 系统: 系统包含处理具有给定组件的实体的逻辑。
  • 🚀 性能: 面向数据的布局可以提高缓存利用率和运行时性能。
  • 🤖 人工智能视角: AI驱动的游戏工具可以自动生成组件并调整系统。

实体组件系统 Archi质地

什么是实体组件系统?

实体组件系统 (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 在游戏引擎和高性能模拟中很常见。例如,框架 Unity DOTS、Bevy 和 EnTT 使用 ECS 通过面向数据的设计来高效地管理数千个对象。

是的。人工智能工具可以建议组件结构、生成系统逻辑并平衡游戏参数。这加快了原型设计速度。ping 并帮助开发者管理大型场景中复杂的实体行为。

人工智能 智能体通过系统读取组件数据来感知游戏世界并决定行动。这种面向数据的ECS布局使得将状态数据高效地输入机器学习模型成为可能。

总结一下这篇文章: