游戏ECS

多使用组合

如果一味地使用继承,那么当游戏世界里面的对象种类变多,功能变复杂以后,会导致整个继承树“头重脚轻”,严重破坏了良好的面向对象设计原则—我们设计的类层次结构应该是扁平结构的,而不是一个头很大的树。
那么,我们需要使用怎样的架构来处理游戏里面的对象呢?答案就是使用组合。

ECS

ECS由三个基本部分组成:实体、组件和系统。实体是与对象关联的唯一id,组件是表示实体信息的数据,系统在实体上运行逻辑,以利用或更改来自组件的数据。

一个简单的例子:玩家,怪或者物体entity。技能component。逻辑集中在system里。

e-c里gameobject是entity,只是个类似容器的抽象概念,entity里包含的component决定了对象是什么
component可以给不同的gameobject重用,通过组合多种component而不是继承来构造不同的对象。
e-c-s三者都有其意义,e-c是组合优于继承,主要用以改善oo的继承耦合过重以及多继承菱形问题。

冗余的OOP层次结构
v2-481d8c44ab799ea842b3e5b1e6bd0d27_720w

实体组件系统(ECS)
v2-5ba6b2aec06fc6eebbb5baeaf343a586_720w