ECS:Entitas 源码浅析 System
概述
System是ECS的S,也是整个框架的入口,通过对System生命周期的控制,达到控制整个ECS模块的作用
Systems类:所有System的管理类,管理四种类型的System:IInitializeSystem, IExecuteSystem, ICleanupSystem, ITearDownSystem。使用List作为容器存储,for进行遍历。Systems实现了接口,Systems本身也可以看做是这四种类型当中的一个,也就是说Systems可以嵌套。
IInitializeSystem:初始化,类似Init
IExecuteSystem:每帧执行一次,类似Update
ICleanupSystem:每帧执行一次,类似LeteUpdate
ITearDownSystem:结束时执行一次,类似 OnDestroy
注:从这个意义上讲,System其实就是把我们的manager给拆散了,粒度更细了。而且,如果只是四种类型的话或许不够。
IReactiveSystem:继承自 IExecuteSystem接口,多了三个方法:Activate,Deactivate,Clear
Activate:激活
Deactivate:失活
Clear:清理,这说明IReactiveSystem的实现里面存在字段,这岂不是违反了ECS的规范?
IReactiveSystem的实现:ReactiveSystem<TEntity>,MultiReactiveSystem<TEntity, TContexts>,JobSystem<TEntity>
ReactiveSystem<TEntity>:响应式系统,Entity添加到Group或从Group里面删除的时候,触发
MultiReactiveSystem<TEntity, TContexts>:多容器响应式系统,与上面类似
JobSystem<TEntity>:这个是所有的Entity每帧都会响应,但是是多线程的,即便线程数量设置为1,依旧是开启一个子线程,而不是在主线程里执行