0

我正在尝试了解 ECS。所以一个组件只是简单的数据,一些管理器将这些组件保存在一个容器中,并循环遍历所有组件以对这些数据采取行动,以“更新”它们。

这个管理器是人们所说的“组件管理器”还是“系统”?还是他们的意思是一样的?如果不是,组件管理器和系统做什么?

4

1 回答 1

1

ECS 对不同的人意味着不同的东西。在实现方面有很多方法,但我个人遵循以下规则:

  • 组件只是普通数据,通常是一个结构或某个对象,没有与之关联的逻辑。

  • 实体是组件的集合。它由一个标识符定义,通常是一个整数,可用于查找索引等组件。

  • 系统是所有游戏逻辑所在的地方。每个系统都有一个原型,即它运行的一组特定组件。系统有一个更新功能,当被调用时,它会访问它感兴趣的特定组件集(它的原型),用于具有特定组件集合的所有实体。此更新功能由外部触发(由什么触发?见下一段)。

现在,这是直接(或至少尝试)解决您的问题的部分。视频游戏是模拟游戏,它们通常由所谓的更新循环驱动(通常与显示器的刷新率同步)。在 ECS 架构中,通常有专用代码将您的系统串在一起排成一个队列,并且在更新循环的每个时间步长上按顺序执行这些系统(即调用它们的更新函数)。那段专用代码不仅管理系统更新循环,还负责管理组件(存储为可由实体 ID 索引的列表/数组)和无数其他任务。在许多实现中,它被称为“引擎”。这就是我认为的“组件经理”。但这在另一种 ECS 方法中可能意味着其他东西。只是我的两分钱。希望它有所帮助。

于 2019-12-26T16:46:53.177 回答