1.ECS概述
ECS全称Entity-Component-System(实体-组件-系统),是基于组合优于继承(将不变的部分使用继承以方便复用, 将多变的部分用组合来方便拓展)的原则的一种模式,游戏中的每一个单元(怪物、相机等)都是一个实体,每个实体又是由一个或多个组件构成的,每个组件仅包含该组件需要关注的数据(例如技能组件保存技能伤害、范围),而系统则用来处理这些实体的集合,其只存逻辑,不存状态,类似于一个工具,例如技能系统会根据遍历到的每一个拥有技能组件的实体,根据状态执行技能。
2.ECS的结构图
World:世界控制器,可能包含许多的Context和System
Context:环境、场景,例如战斗场景等
Entitas:包含在环境下的所有实体
Entity:实体
Component:组件
Groups:根据某种规则组合起来的实体群组
System:系统,用来放置具体逻辑
Service:服务,用来放置共享的逻辑,例如时间/输入等
Utils:工具型
Matcher:匹配器,提供组成群组的具体规则
3.ECS的优势
(1)容易添加新的复杂的实体类型
添加一个新的实体只需要明确实体上有哪些组件,将组件快速整合起来。
(2)容易定义新的实体数据
需要新的实体数据就可以通过定义一个新的组件来进行存储
(3)更加的高效率
系统只关心对应的组件数据,而不用关心一个对象上的所有数据,例如技能系统只关心技能,移动系统只关心位移数据,在遍历的时候,内存的命中率比较高,首先可以通过在创建的时候申请一个连续的内存空间,同时相对于一整个对象,它的内存跨度相对会小很多,打个比方,就是在一排套房里面找一间又一间的厕所和在一排厕所里面找下一件厕所。