GameFramework 二次封装之 Procedure 流程管理

项目 github地址

打开项目选GameLauncher场景,直接启动游戏。我用的是 Unity 2021.3.6f1 版本。但应该是2017之后的都支持,没有实测过。

参考

GameFramework框架详解之 Procedure 流程管理

老规矩,先看上面这篇文章。重构后的项目保留了框架的启动逻辑和流程。

简单总结一下实现原理

  1. 每一个 Procedure 都继承自 ProcedureBase。
  2. 每一个 Procedure 其实就是状态机的一个状态 FSMState。
  3. procedureOwner 其实就是 procedureManager,管理所有的FSMState和状态的生命周期。同时,procedureOwner 还用来作为流程的上下文,存储流程之间的共享数据。
  4. ProcedureComponent会在启动的时候创建这个状态机。

流程重构

游戏用流程的不同阶段来解耦和隔离业务功能是一种很好的模式。但原来的StartForce项目,只是简单的把流程作为串联业务的场所,混合了太多逻辑。所以这里把 StartForce 进行了重构,重构之后:

  1. 流程 ProcedureXXX 职责更单一,只负责流程的切换和流程自己的生命周期控制。
  2. 和当前业务相关的业务逻辑,UI逻辑,等都放在当前业务的目录下,让业务代码更具内聚性。
  3. 如果某些非业务功能或UI是各个流程共用的,比如某些UI界面可能在多个流程都用到,就放到 Comm/UI 目录下面。
  4. 如果某些业务是多个流程共用的,就放到Scripts/Game/Bs/XXX 目录下面,根据业务模块来做扩展。

总的来说,就是把整个游戏业务按不同的流程进行拆分(一般会对应不同的场景),也就是说尽量按照场景来组织ui和业务(这个场景有哪些ui,有哪些业务),如果遇到共用的ui和业务,就往上提。

使用

先上个截图

添加流程分三步

  1. ProcedureXXX 继承 ProcedureBase,实现对应的五个方法。 OnInit,OnEnter,OnUpdate,OnLeave,OnDestroy

  2. OnUpdate 里面做流程切换逻辑,状态切换通过ChangeState方法完成。

  3. 业务逻辑弄好之后,在图中的 Procedure 组件节点配置流程。

    框架会自动发现继承了ProcedureBase的流程,只要在新增的流程前面打钩就好了,就会加入到框架的流程管理系统。

几点说明

  1. 如果需要在流程之间传递数据,或者说有数据上的依赖,统一使用 ProcedureDataMgr 进行设置和获取,不要直接使用 procedureOwner。

  2. 在 Procedure 组件节点配置中的入口配置,"Entrance Procedure",选 ProcedureLaunch 是游戏启动流程,选 ProcedureTest 则是启动的测试流程,项目中的测试用例是用这个流程启动的。

  3. 流程的业务逻辑,不要写在 在 ProcedureXXX 里。

    ProcedureXXX 应该只处理流程相关的业务,流程的进入退出等,或者通过 ProcedureDataMgr 来获取和设置数据。

    具体流程内的业务,统一在 ProcedureXXXMgr 中去实现。

最后,借用一下PassionY的 StarForce 流程图,可以按照这个流程图来尝试调试下游戏,看看每个流程是怎么串联起来的。重构之后的代码很容易看懂,设个断点跟着跑跑,很快就能看懂(默认的是编辑器模式,只涉及到6个流程)。

相关推荐
止观止5 小时前
React虚拟DOM的进化之路
前端·react.js·前端框架·reactjs·react
谢尔登5 小时前
【React Natve】NetworkError 和 TouchableOpacity 组件
前端·react.js·前端框架
G等你下课7 小时前
React 路由懒加载入门:提升首屏性能的第一步
前端·react.js·前端框架
钟智强10 小时前
Flutter 前端开发中的常见问题全面解析
android·前端·flutter·ios·前端框架·dart
前端设计诗10 小时前
对React官网《Virtual DOM 及内核》注解:其实Virtual DOM 就藏在在代码行间
前端·react.js·前端框架
goldenocean13 小时前
React之旅-06 Ref
前端·react.js·前端框架
斯~内克14 小时前
微前端框架深度对决:qiankun、micro-app、wujie 技术内幕与架构选型指南
架构·前端框架
hard_coding_wang15 小时前
使用layui的前端框架过程中,无法加载css和js怎么办?
javascript·前端框架·layui
OEC小胖胖15 小时前
前端框架状态管理对比:Redux、MobX、Vuex 等的优劣与选择
前端·前端框架·web
我想说一句17 小时前
React Router奇幻漂流记:懒加载、鉴权与404大冒险
前端·javascript·前端框架