先上类图
主要接口类说明:
ZEntity:实体类,它不支持继承,类似于Unity的GameObject,它需要通过EntityPool进行创建以及实例化。
ZComponent:组件类,用于封装实体的行为以及对外提供的功能等,它实现了IZComponent接口,用户定义新的组件只需要从其进行继承就可以。
ZSystem:系统类,用于封装业务或者游戏的控制逻辑,它实现了IZSystem,可以理解为功能抽象类,它负责对系统的各个实体进行调度来完成一项系统功能,同时它也负责处理用户交互信息,比如建立Unity中的UGUI系统与底层实体类的通信桥梁。这里一般使用事件触发机制/反射处理等机制。
EntityPool:对象池类,它用于创建实体,在Editor中可以定义好实体的模板(这里模板的定义类型Unity的Prefab),以ID为做为实体的唯一标识,在Runtime阶段,开发通过EntityPool的CreateEntity方法根据ID找到相应的实体模板,以其为参考进行实体对象的实例化操作。同时System在框架内部就是一个实体,只不过它是一单体,并在系统初始化阶段就自动创建出来。
每个类的详细接口、属性说明还是参考Github上的代码说明
https://github.com/bennychao/ZECS
例子说明
一个例子帮助大家理解类之间如何进行运用,比如一个FPS游戏中一个敌人Tank被攻击的场景,会有Unity的场景中定义一个Tank的GameObject或者Prefab做为展示,会绑定上Unity提供的一些内置组件(这里不是指ZECS的组件),比如BoxCollider负责检测子弹被击中,这些定义好的也就是我们前两节所说的View层。然后再定义一个名为ZTank实体,并定义一个Blood的组件,绑定到ZTank上,它负责血量的计算。最后定义一个控制类TankController,它从Zsystem继承。
当Tank被攻击时,其BoxColl