ECS的全称为Entity Component System,是最早由暴雪在GDC2017上提出的一个新的游戏设计框架,数据的组织和对象的处理上都和目前主流的OO模型有很大的差距,这里引用一下云风在浅谈《守望先锋》中的 ECS 构架中的总结:
Entity Component System (ECS) 是一个 gameplay 层面的框架,它是建立在渲染引擎、物理引擎之上的,主要解决的问题是如何建立一个模型来处理游戏对象 (Game Object) 的更新操作。
简单来讲,这里的Entity是一个实体,类似于Unity中的GameObject,可以表示游戏中的单个对象。Component是Entity的一个属性,或者说一个Entity是由多个Component组合而成的,类似Unity中的Component,但一般定义为一个结构体,不包含任何函数。System来处理含有某些特定Component的Entity的某一类行为,如一个MoveSystem处理所有包含Position和Velocity组件的Entity的移动过程。
这边最主要区别就是把对象上的数据和行为剥离,由专门的System来处理某一种行为,而不是每个对象在自己的一个更新函数中处理所有和自己相关的操作。当然我们在平时面向对象设计过程中,也会有类似的管理器来处理对象的一部分行为,但ECS在架构设计的时候就将需要将这部分操作和需要的数据提前考虑清楚,使得每一个系统的都能符合ECS的要求。