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

相关推荐
CappuccinoRose6 小时前
React框架学习文档(七)
开发语言·前端·javascript·react.js·前端框架·reactjs·react router
Java.慈祥9 小时前
速通-微信小程序 2Day
微信小程序·小程序·前端框架
徐同保10 小时前
react-markdown使用
前端·react.js·前端框架
晚霞的不甘14 小时前
Flutter for OpenHarmony3D DNA 螺旋可视化:用 Canvas 构建沉浸式分子模型
前端·数据库·经验分享·flutter·3d·前端框架
mocoding1 天前
使用鸿蒙化Flutter图片选择、相机拍照、多图选择三方库image_picker实战教程示例
flutter·前端框架·harmonyos·鸿蒙
Jinuss2 天前
源码分析之React中Scheduler调度器的任务优先级
前端·react.js·前端框架
Aotman_2 天前
Vue el-table 表尾合计行
前端·javascript·vue.js·elementui·前端框架·ecmascript
晚霞的不甘2 天前
Flutter for OpenHarmony 实现高级视差侧滑菜单:融合动效、模糊与交互动画的现代 UI 设计
flutter·ui·前端框架·交互·鸿蒙
晚霞的不甘2 天前
Flutter for OpenHarmony构建全功能视差侧滑菜单系统:从动效设计到多页面导航的完整实践
前端·学习·flutter·microsoft·前端框架·交互