YuFramework

目录

Github仓库

中央管理器GameManager

单例模板

数据配置系统ConfigManager

Luban数据配表方案

事件系统EventManager

状态机模板FSM

状态机管理器FsmManager

层次状态机HFSM

对象池管理系统PoolManager

输入系统InputManager

存储系统SaveManager

资源加载系统AssetManager

场景切换模块SceneManager

UI系统UIManager

UI界面MVC模板

GM指令系统

时间速率拆分系统TimeScaleManager

音效系统SFXManager

BGM系统BGMManager

框架简介

背景

  为什么需要游戏框架?以我个人切身体会,在我初学unity的第一年里,做过四五个项目,包括gamejam比赛这些。其中,我对每一个项目之间重复模块的实现方面有所感触,深切体会到,每次在不同项目中去完成另一个项目已有的模块,并且经历测试、功能拓展、代码增删不同步等问题。
  一般的GameJam比赛要求时长较短,且不说这个过程耗时费力,这对每个项目间同一个模块的维护也变得异常困难,经常会出现同一个模块同一个功能,在这个项目是这样实现的,在另一个项目是那样实现的,两种实现方式可以各取所长,但是就是难以合并起来,已经与项目有部分耦合或者代码间有不同关联依赖了,导致后续新项目还要对比两个项目的实现方式进行取舍。
  举个例子:音效系统模块SFXManager的多重播放单个音源功能,在《虚谬都庭》中是一个音源一个GameObject,通过PlayOneShot()来实现,但是拿不到本次播放的句柄。在《应龙实录》中则是通过向对象池模块中申请该音源的对象池,一个GameObject播放一次音源,更好地对单次播放进行处理。
  所以封装一个可用的GameJam游戏框架被提上日程,并不是要求该框架处理各模块有多好多优秀,而是不能没有框架。框架可以不断迭代升级维护,在此过程中,框架会日趋完善,性能会逐步提升,模块也会越来越全面。

需求

  一个良好的轻量级的游戏框架需要做到:

  • 需要具备可拓展性、可维护性,以便后续对框架进行迭代升级。
  • 组件和系统间的低耦合,高内聚,具体项目中,开发者并不需要关心框架内部逻辑细节,框架外的功能模块也不受框架约束,耦合性尽可能降至最低。

实现

  YuFramework经过多个项目的迭代升级维护,目前已经包含了单例模版、数据分离配表、事件系统、状态机系统、HFSM层次状态机模版、输入系统、对象池系统、存储系统、时间速率拆分系统、aa资源管理系统、BGM和音效系统、场景切换系统、UI系统、UI的MVC模版、剧情系统,以及中央管理系统GameManager等多个系统模块或便利性模板。封装了部分拓展功能模块如动画播放、文件操作、加密解密等拓展功能。
  在某些独立性更高的模块,框架还引入更专业的解决方案或插件来辅助实现。Luban方案完成数据配表分离、EasySave插件完成数据存储、DialogueSystem插件完成剧情系统、Dotween完成动效需求、Odin协助编辑器调试、InGameDebugConsole完成debug模块。
  YuFramework框架对项目也提出了具体的文件管理要求,但并不是限制开发者对文件夹和文件的自定义性。通过后续对框架的介绍,希望可以帮助开发者快速上手YuFramework,并帮助新人开发者建立良好的代码规范和文件管理。