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个流程)。

相关推荐
PleaSure乐事4 小时前
【React.js】AntDesignPro左侧菜单栏栏目名称不显示的解决方案
前端·javascript·react.js·前端框架·webstorm·antdesignpro
getaxiosluo4 小时前
react jsx基本语法,脚手架,父子传参,refs等详解
前端·vue.js·react.js·前端框架·hook·jsx
理想不理想v5 小时前
vue种ref跟reactive的区别?
前端·javascript·vue.js·webpack·前端框架·node.js·ecmascript
September_ning12 小时前
React.lazy() 懒加载
前端·react.js·前端框架
晴天飛 雪13 小时前
React 守卫路由
前端框架·reactjs
web行路人13 小时前
React中类组件和函数组件的理解和区别
前端·javascript·react.js·前端框架
一ge科研小菜鸡15 小时前
React前端框架:现代网页开发的基石(附带构建简单任务管理应用案例代码)
前端框架
熊的猫16 小时前
JS 中的类型 & 类型判断 & 类型转换
前端·javascript·vue.js·chrome·react.js·前端框架·node.js
前端青山1 天前
Node.js-增强 API 安全性和性能优化
开发语言·前端·javascript·性能优化·前端框架·node.js
qq_364371721 天前
VueRouter 导航故障问题
javascript·vue.js·前端框架·vue-router