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


