《YuFramework》
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,并帮助新人开发者建立良好的代码规范和文件管理。