Merge branch ‘master’ of github.com:ZHOURUIH/MyFramework
一个偏传统游戏引擎开发思路的 Unity 游戏框架与工具链。
MyFramework 不是单纯封装 Unity API 的运行时框架,而是一套围绕实际商业项目开发流程整理出来的工程体系,重点关注:
框架从 0 开始设计并持续迭代多年,目前已经应用于:
支持平台:
✅ Windows ✅ Android ✅ iOS ✅ WebGL
MyFramework 最主要的特点不是某一个单独模块,而是一套比较完整的项目开发工作流。
通过在 UI Prefab 上配置需要访问的节点,自动生成 UI 脚本代码与注册逻辑,减少大量重复的查找节点和绑定代码。
UI Prefab ↓ UGUIGenerator ↓ 生成 UI 成员变量 ↓ 生成节点查找代码 ↓ 业务逻辑代码
支持:
使用 CSV 作为配置表格式,并配套自研表格编辑器。
配置表工具链支持:
配置表编辑阶段即可发现大量错误,减少运行时问题。
CSV 配置表 ↓ 表格编辑器 ↓ 字段检查 / 引用检查 / 路径检查 ↓ 生成客户端表格代码 ↓ 生成服务器表格代码
根据协议配置自动生成客户端与服务器消息代码。
协议配置 ↓ 协议生成工具 ↓ 生成客户端消息代码 ↓ 生成服务器消息代码 ↓ 自动注册消息
MyFramework 有配套服务器框架:
https://github.com/ZHOURUIH/MyServerFramework
客户端与服务器可以共享协议生成、配置表生成等工具链,适合需要长期维护的中大型项目。
框架代码按照是否可热更进行了明确分层。
Frame_Base -> 不可热更,最基础的框架代码 Frame_Game -> 不可热更,项目非热更代码的框架 Game -> 不可热更,项目应用层启动逻辑 Frame_HotFix -> 可热更,框架层热更代码 HotFix -> 可热更,项目应用层热更代码
依赖关系大致为:
Frame_Base -> Frame_HotFix -> HotFix Frame_Base -> Frame_Game -> Game Game -> HotFix
这种分层方式可以让框架层和业务层都有较高的热更新能力,同时又保留必要的启动稳定性。
集成 HybridCLR。
除启动和热更新下载逻辑外,大部分代码都可以参与热更新。
集成 Obfuz。
用于提升发布后的代码安全性。
提供完整 UI 封装,避免业务层直接访问 Unity 原生组件。
框架尽量不依赖 UGUI 的锚点和自动布局组件,而是倾向于通过代码显式控制 UI 的位置、尺寸、显示状态和输入逻辑。
不使用 UGUI 默认 EventSystem 作为主要输入派发方式,而是自己实现统一输入检测。
部分 Unity 原生组件仍然可以按需使用 EventSystem,例如 ScrollRect。
统一封装资源访问。
业务层无需关心资源来自编辑器还是 AssetBundle。
提供:
其中按位序列化可进一步降低网络带宽占用。
命令系统用于封装具有完整逻辑意义的事件。
它可以用于:
示例:
数据改变 ↓ 发送命令 ↓ 更新数据 ↓ 刷新界面 ↓ 网络同步
调用方只需要关心触发了什么事件,而不需要关心事件内部涉及哪些模块。
部分逻辑使用组件思想进行组织,通过组合代替复杂继承。
Character ├─ ComponentA ├─ ComponentB └─ ComponentC
适合拆分可复用、可独立更新的功能逻辑。
基于 PrefabPool 抽象出 EffectPool。
QuickEffect 适用于非循环、不带拖尾、需要频繁同时播放的粒子特效。
包含大量基础工具函数,例如:
同时提供大量 Scope 设计,用于实现类似 C++ RAII 的自动释放与状态恢复。
框架包含大量单元测试,主要覆盖:
这部分测试用于保证框架中的基础工具函数和核心逻辑长期稳定。
Editor 中提供了大量项目检查和辅助工具,例如:
这些工具主要用于减少大型项目长期维护过程中的隐性错误。
不同框架的目标并不相同,下表只用于说明设计取向,不代表优劣对比。
MyFramework 并不是为了追求最新潮的架构,也不是为了追求最少代码量。
它更关注:
代码定位清晰,问题出现后能够快速查找。
尽量减少对 Unity 自动行为和第三方插件的过度依赖。
框架中很多地方倾向于显式执行,而不是依赖隐藏生命周期。
优先解决商业项目中真正会遇到的问题:
框架更偏向传统游戏引擎开发思路,强调明确的生命周期、明确的调用关系和统一的代码风格。
Assets ├── Editor │ ├── Frame │ │ ├── ComponentEditor │ │ ├── EditorWindow │ │ ├── Menu │ │ └── Tween │ └── Game ├── EditorRes └── Scripts ├── Frame_Base ├── Frame_Game ├── Frame_HotFix ├── Game └── HotFix
推荐:
Unity 2022.3 LTS 或更高版本
作者当前项目使用:
Unity 6000.2
打开项目后无需额外配置,直接按:
F5
即可启动游戏。
启动场景为:
Start.unity
欢迎交流 Unity 游戏开发、框架设计、客户端开发、服务器开发等相关内容。
群内主要讨论:
详细说明请查看文档目录:
https://github.com/ZHOURUIH/MyFramework/tree/master/文档
服务器项目:
与客户端框架配套使用。
如果这个项目对你有帮助,欢迎点一个 Star ⭐
你的支持会让我持续完善框架。
MIT
版权所有:中国计算机学会技术支持:开源发展技术委员会 京ICP备13000930号-9 京公网安备 11010802047560号
🎮 MyFramework
一个偏传统游戏引擎开发思路的 Unity 游戏框架与工具链。
MyFramework 不是单纯封装 Unity API 的运行时框架,而是一套围绕实际商业项目开发流程整理出来的工程体系,重点关注:
框架从 0 开始设计并持续迭代多年,目前已经应用于:
支持平台:
✅ Windows ✅ Android ✅ iOS ✅ WebGL
🚀 核心亮点
MyFramework 最主要的特点不是某一个单独模块,而是一套比较完整的项目开发工作流。
1. UI 自动生成
通过在 UI Prefab 上配置需要访问的节点,自动生成 UI 脚本代码与注册逻辑,减少大量重复的查找节点和绑定代码。
支持:
2. 配置表工具链
使用 CSV 作为配置表格式,并配套自研表格编辑器。
配置表工具链支持:
配置表编辑阶段即可发现大量错误,减少运行时问题。
3. 网络协议代码生成
根据协议配置自动生成客户端与服务器消息代码。
支持:
4. 客户端 + 服务器配套
MyFramework 有配套服务器框架:
https://github.com/ZHOURUIH/MyServerFramework
客户端与服务器可以共享协议生成、配置表生成等工具链,适合需要长期维护的中大型项目。
5. 热更新分层
框架代码按照是否可热更进行了明确分层。
依赖关系大致为:
这种分层方式可以让框架层和业务层都有较高的热更新能力,同时又保留必要的启动稳定性。
📌 项目验证情况
✨ 项目特色
🔥 HybridCLR 热更新
集成 HybridCLR。
支持:
除启动和热更新下载逻辑外,大部分代码都可以参与热更新。
🔒 Obfuz 混淆
集成 Obfuz。
支持:
用于提升发布后的代码安全性。
🖥 UI 框架
提供完整 UI 封装,避免业务层直接访问 Unity 原生组件。
支持:
框架尽量不依赖 UGUI 的锚点和自动布局组件,而是倾向于通过代码显式控制 UI 的位置、尺寸、显示状态和输入逻辑。
🧭 自定义输入系统
不使用 UGUI 默认 EventSystem 作为主要输入派发方式,而是自己实现统一输入检测。
支持:
部分 Unity 原生组件仍然可以按需使用 EventSystem,例如 ScrollRect。
📦 资源管理系统
统一封装资源访问。
支持:
业务层无需关心资源来自编辑器还是 AssetBundle。
🌐 网络框架
支持:
提供:
其中按位序列化可进一步降低网络带宽占用。
⚙ 命令系统
命令系统用于封装具有完整逻辑意义的事件。
它可以用于:
示例:
调用方只需要关心触发了什么事件,而不需要关心事件内部涉及哪些模块。
🧩 组件系统
部分逻辑使用组件思想进行组织,通过组合代替复杂继承。
适合拆分可复用、可独立更新的功能逻辑。
🎬 特效系统
基于 PrefabPool 抽象出 EffectPool。
支持:
QuickEffect 适用于非循环、不带拖尾、需要频繁同时播放的粒子特效。
🧰 基础工具库
包含大量基础工具函数,例如:
同时提供大量 Scope 设计,用于实现类似 C++ RAII 的自动释放与状态恢复。
🧪 单元测试
框架包含大量单元测试,主要覆盖:
这部分测试用于保证框架中的基础工具函数和核心逻辑长期稳定。
🛠 工程检查工具
Editor 中提供了大量项目检查和辅助工具,例如:
这些工具主要用于减少大型项目长期维护过程中的隐性错误。
📋 功能概览
📈 与常见框架的定位差异
🎯 设计理念
MyFramework 并不是为了追求最新潮的架构,也不是为了追求最少代码量。
它更关注:
1. 可维护
代码定位清晰,问题出现后能够快速查找。
2. 可控
尽量减少对 Unity 自动行为和第三方插件的过度依赖。
框架中很多地方倾向于显式执行,而不是依赖隐藏生命周期。
3. 可落地
优先解决商业项目中真正会遇到的问题:
4. 长期维护
框架更偏向传统游戏引擎开发思路,强调明确的生命周期、明确的调用关系和统一的代码风格。
📁 主要目录结构
Scripts 分层说明
🚀 快速开始
环境
推荐:
作者当前项目使用:
启动
打开项目后无需额外配置,直接按:
即可启动游戏。
启动场景为:
💬 社区交流
欢迎交流 Unity 游戏开发、框架设计、客户端开发、服务器开发等相关内容。
群内主要讨论:
📖 文档
详细说明请查看文档目录:
https://github.com/ZHOURUIH/MyFramework/tree/master/文档
🖥 配套服务器框架
服务器项目:
https://github.com/ZHOURUIH/MyServerFramework
支持:
与客户端框架配套使用。
⭐ Star
如果这个项目对你有帮助,欢迎点一个 Star ⭐
你的支持会让我持续完善框架。
扫码加入微信群,欢迎交流框架使用、工具链、热更新、游戏开发等内容
License
MIT