一个偏传统游戏引擎开发思路的 Unity 游戏框架与工具链。
MyFramework 不是单纯封装 Unity API 的运行时框架,而是一套围绕实际商业项目开发流程整理出来的工程体系,重点关注:
- 热更新分层
- UI 代码生成
- 配置表工具链
- 网络协议代码生成
- 资源管理
- 对象池
- 工程检查
- 低 GC
- 强生命周期控制
- 客户端与服务器协作
框架从 0 开始设计并持续迭代多年,目前已经应用于:
- 个人商业项目(MMORPG / 传奇类游戏)
- 公司手游项目
支持平台:
✅ Windows ✅ Android ✅ iOS ✅ WebGL
MyFramework 已支持通过 Unity Package Manager 以 Git 插件形式安装。
在 Packages/manifest.json 中配置 OpenUPM Registry:
{
"scopedRegistries": [
{
"name": "package.openupm.com",
"url": "https://package.openupm.com",
"scopes": [
"com.whimwindgames",
"com.code-philosophy",
"com.cysharp"
]
}
],
"dependencies": {
"com.whimwindgames.myframework": "1.1.0-preview.1"
}
}也可以使用 OpenUPM CLI:
openupm add com.whimwindgames.myframework
生产项目应固定版本标签:
https://github.com/whimwindgames/MyFramework.git?path=/Packages/com.whimwindgames.myframework#com.whimwindgames.myframework/1.1.0-preview.1
安装方式:
Window
Package Manager
+
Install package from git URL...
然后输入上面的 Git URL。Git 安装仍需先配置 OpenUPM scopes,以便解析 UniTask、HybridCLR 和 Obfuz 依赖。自托管 Git 服务作为源码镜像使用,OpenUPM 的公开发布源固定为 GitHub。
安装插件后,新建工程中还没有默认启动场景、业务入口脚本和运行时配置文件,需要执行初始化菜单。
普通初始化:
MyFramework/初始化/初始化框架
带 HybridCLR + Obfuz 的初始化:
MyFramework/初始化/初始化框架+HybridCLR+Obfuz
初始化会自动处理:
复制 ProjectTemplate~ 中的默认项目文件
生成 Assets/Resources/Scene/start.unity
生成 Assets/Resources/Settings/FrameSettings.asset
生成 ProjectSettings/MyFrameworkSettings.asset
将 GameEntry 脚本挂接到 start.unity 的 GameEntry 节点
将 start.unity 添加到 Build Settings
如果选择 HybridCLR + Obfuz 初始化,还会自动处理:
安装 HybridCLR
安装 Obfuz
添加 USE_HYBRID_CLR / USE_OBFUZ 宏
设置生成代码输出目录到 Assets/Scripts/AutoGenerated
框架和默认启动场景仍然会使用部分旧输入接口,例如 UnityEngine.Input 和 StandaloneInputModule。
如果工程启用了 Input System Package,并且运行时报:
You are trying to read Input using the UnityEngine.Input class...
需要在 Unity 中手动设置:
Project Settings
Player
Other Settings
Active Input Handling = Both
修改后通常需要重启 Unity 编辑器才能完全生效。
MyFramework 最主要的特点不是某一个单独模块,而是一套比较完整的项目开发工作流。
通过在 UI Prefab 上配置需要访问的节点,自动生成 UI 脚本代码与注册逻辑,减少大量重复的查找节点和绑定代码。
UI Prefab
↓
UGUIGenerator
↓
生成 UI 成员变量
↓
生成节点查找代码
↓
业务逻辑代码
支持:
- 单节点生成
- 数组节点生成
- 自动生成成员变量
- 自动生成 assignWindow
- 自动生成构造代码
- 自动生成注册代码
- 保留手写逻辑代码
使用 CSV 作为配置表格式,并配套自研表格编辑器。
配置表工具链支持:
- 字段类型检查
- 枚举合法性检查
- ID 唯一性检查
- 表格引用检查
- 资源路径检查
- 客户端代码生成
- 服务器代码生成
- 运行时代码检查逻辑生成
配置表编辑阶段即可发现大量错误,减少运行时问题。
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
这种分层方式可以让框架层和业务层都有较高的热更新能力,同时又保留必要的启动稳定性。
| 项目 | 状态 |
|---|---|
| 持续迭代 | 5+ 年 |
| 当前预览版本验证环境 | Unity 6000.3.11f1 |
| 最低 Unity 版本 | Unity 6000.0 |
| 已用于个人 MMORPG 项目 | ✅ |
| 已用于公司手游项目 | ✅ |
| 客户端项目规模 | 20万+ 行 |
| 服务端项目规模 | 20万+ 行 |
| GitHub Star | 596+ |
集成 HybridCLR。
支持:
- Frame 层热更新
- Game 层热更新
- 大部分业务逻辑热更新
除启动和热更新下载逻辑外,大部分代码都可以参与热更新。
集成 Obfuz。
支持:
- 符号混淆
- 字符串加密
- 代码保护
用于提升发布后的代码安全性。
提供完整 UI 封装,避免业务层直接访问 Unity 原生组件。
支持:
- 无限滚动列表
- CheckBox
- Slider
- Progress
- DropList
- 长按
- 双击
- 拖拽
- 点击穿透
- UI 对象池
- UI 代码自动生成
框架尽量不依赖 UGUI 的锚点和自动布局组件,而是倾向于通过代码显式控制 UI 的位置、尺寸、显示状态和输入逻辑。
不使用 UGUI 默认 EventSystem 作为主要输入派发方式,而是自己实现统一输入检测。
支持:
- 鼠标输入
- 触摸输入
- 点击
- 双击
- 长按
- 拖拽
- 点击穿透
部分 Unity 原生组件仍然可以按需使用 EventSystem,例如 ScrollRect。
统一封装资源访问。
支持:
- AssetDatabase
- AssetBundle
- 同步加载
- 异步加载
业务层无需关心资源来自编辑器还是 AssetBundle。
支持:
- TCP
- UDP
- WebSocket
- HTTP
提供:
- 消息自动注册
- 消息代码自动生成
- Json 序列化
- 字节序列化
- 按位序列化
其中按位序列化可进一步降低网络带宽占用。
命令系统用于封装具有完整逻辑意义的事件。
它可以用于:
- 逻辑封装
- 模块通信
- UI 与逻辑解耦
- 延迟执行
- 主线程调度
- 日志追踪
示例:
数据改变
↓
发送命令
↓
更新数据
↓
刷新界面
↓
网络同步
调用方只需要关心触发了什么事件,而不需要关心事件内部涉及哪些模块。
部分逻辑使用组件思想进行组织,通过组合代替复杂继承。
Character
├─ ComponentA
├─ ComponentB
└─ ComponentC
适合拆分可复用、可独立更新的功能逻辑。
基于 PrefabPool 抽象出 EffectPool。
支持:
- Prefab 对象池
- Effect 对象池
- QuickEffect 快速特效
- Trail 管理
- 生命周期管理
- 按标签批量销毁
QuickEffect 适用于非循环、不带拖尾、需要频繁同时播放的粒子特效。
包含大量基础工具函数,例如:
- BinaryUtility
- StringUtility
- MathUtility
- FileUtility
- TimeUtility
- UnityUtility
同时提供大量 Scope 设计,用于实现类似 C++ RAII 的自动释放与状态恢复。
框架包含大量单元测试,主要覆盖:
- 序列化
- 字符串工具
- 数学工具
- 文件工具
- 容器扩展
- Scope
- 命令系统
- 事件系统
- 场景流程
- UI 基础逻辑
- 网络消息
这部分测试用于保证框架中的基础工具函数和核心逻辑长期稳定。
Editor 中提供了大量项目检查和辅助工具,例如:
- 代码规范检查
- 空行检查
- 空格检查
- 单行长度检查
- 命名规范检查
- 函数排版检查
- 注释检查
- 命令命名规范检查
- 热更引用检查
- 资源引用查找
- 未引用资源检查
- 材质引用丢失检查
- 图集引用检查
- 多语言文本检查
- UI 适配组件检查
- 资源文件名规范检查
- 预设根节点变换检查
- 热更与非热更资源互相引用检查
这些工具主要用于减少大型项目长期维护过程中的隐性错误。
| 模块 | 状态 |
|---|---|
| HybridCLR | ✅ |
| Obfuz | ✅ |
| UI 框架 | ✅ |
| UI 代码生成 | ✅ |
| 自定义输入系统 | ✅ |
| 资源管理 | ✅ |
| AssetBundle | ✅ |
| TCP | ✅ |
| UDP | ✅ |
| WebSocket | ✅ |
| HTTP | ✅ |
| 网络消息生成 | ✅ |
| Json 序列化 | ✅ |
| 字节序列化 | ✅ |
| 按位序列化 | ✅ |
| CSV 配置 | ✅ |
| 配置代码生成 | ✅ |
| SQLite | ✅ |
| 类对象池 | ✅ |
| List 对象池 | ✅ |
| GameObject 对象池 | ✅ |
| Prefab 对象池 | ✅ |
| Effect 对象池 | ✅ |
| Tween 系统 | ✅ |
| 多语言 | ✅ |
| 新手引导 | 部分拆分 |
| Google 登录 | 待整理 |
| Google 支付 | 待整理 |
| AAB PAD 打包流程 | 待整理 |
不同框架的目标并不相同,下表只用于说明设计取向,不代表优劣对比。
| 方向 | MyFramework | GameFramework | ET | TEngine |
|---|---|---|---|---|
| 主要定位 | Unity 客户端框架 + 热更分层 + 工程工具链 + Demo | Unity 游戏框架 | 客户端/服务器一体化架构 | Unity 工程化框架 |
| 设计风格 | 强控制、强规范、偏传统引擎/C++ 风格 | 模块化、通用型 | Actor / 分布式思路 | 更贴近 Unity 生态 |
| 热更新分层 | Frame_HotFix / HotFix 独立分层 | 通常由项目自行接入 | 依项目方案而定 | 通常支持 HybridCLR |
| UI 代码生成 | 内置 UGUIGenerator | 非核心重点 | 依项目实现 | 通常有相关工具 |
| 协议代码生成 | 支持客户端与服务器消息生成 | 非核心重点 | 核心能力之一 | 依项目实现 |
| 配置表工具链 | 表格编辑器 + 检查 + 客户端/服务器代码生成 | 依项目扩展 | 依项目扩展 | 通常有相关工具 |
| 资源/代码检查工具 | 内置较多检查菜单 | 依项目扩展 | 依项目扩展 | 工程化工具较多 |
| 适合方向 | RPG / MMO / 长期商业项目 / 强规范团队 | 通用 Unity 项目 | 前后端一体化项目 | Unity 商业项目快速开发 |
MyFramework 并不是为了追求最新潮的架构,也不是为了追求最少代码量。
它更关注:
代码定位清晰,问题出现后能够快速查找。
尽量减少对 Unity 自动行为和第三方插件的过度依赖。
框架中很多地方倾向于显式执行,而不是依赖隐藏生命周期。
优先解决商业项目中真正会遇到的问题:
- 性能
- GC
- 热更新
- 工具链
- 资源管理
- UI 开发效率
- 客户端与服务器协议一致性
框架更偏向传统游戏引擎开发思路,强调明确的生命周期、明确的调用关系和统一的代码风格。
MyFramework 现在以 UPM Package 形式组织,框架代码位于:
Packages
└── com.whimwindgames.myframework
├── Runtime
│ ├── Frame_Base
│ ├── Frame_Game
│ └── Frame_HotFix
├── Editor
│ ├── Editor_Frame
│ └── EditorRes_Frame
├── ProjectTemplate~
├── package.json
└── README.md
| 目录 | 说明 |
|---|---|
| Runtime/Frame_Base | 不可热更,最基础的框架代码 |
| Runtime/Frame_Game | 不可热更,项目非热更代码的框架 |
| Runtime/Frame_HotFix | 可热更,框架层热更代码 |
| Editor/Editor_Frame | 框架编辑器工具与菜单 |
| Editor/EditorRes_Frame | 框架编辑器资源与辅助逻辑 |
| ProjectTemplate~ | 初始化工程时复制到用户工程的模板文件 |
安装插件后,用户工程中由初始化菜单生成项目入口和默认文件:
Assets
├── Resources
│ ├── Scene
│ │ └── start.unity
│ └── Settings
│ └── FrameSettings.asset
└── Scripts
├── AutoGenerated
├── Game
└── HotFix
| 目录 | 说明 |
|---|---|
| Assets/Scripts/Game | 不可热更,项目应用层启动逻辑 |
| Assets/Scripts/HotFix | 可热更,项目应用层热更代码 |
| Assets/Scripts/AutoGenerated | HybridCLR / Obfuz 等生成代码 |
| Assets/Resources/Scene | 默认启动场景 |
| Assets/Resources/Settings | 运行时框架配置 |
最低版本:
Unity 6000.0
当前预览版本验证环境:
Unity 6000.3.11f1
推荐通过 OpenUPM 安装:
openupm add com.whimwindgames.myframework
或者使用固定版本的 Git URL:
https://github.com/whimwindgames/MyFramework.git?path=/Packages/com.whimwindgames.myframework#com.whimwindgames.myframework/1.1.0-preview.1
安装完成后执行:
MyFramework/初始化/初始化框架
需要同时安装 HybridCLR + Obfuz 时执行:
MyFramework/初始化/初始化框架+HybridCLR+Obfuz
初始化完成后,默认启动场景为:
Assets/Resources/Scene/start.unity
直接打开该场景运行即可。
为了更直观地展示 MyFramework 在实际 Unity 项目中的使用方式,现已提供一个基于本框架开发的完整塔防游戏 Demo:
项目地址:
https://github.com/ZHOURUIH/MyFramework_TDDemo
MyFramework_TDDemo 不是单个功能的代码片段,而是一个按照 MyFramework 项目结构组织的完整 Unity 工程,可以用于了解框架从项目启动、场景切换到具体游戏业务的整体落地方式。
Demo 当前实现了以 Rogue-like 为核心的塔防战斗玩法,主要包含:
- 炮塔放置、交换和出售
- 怪物波次生成
- 地面与飞行怪物路线
- 炮塔索敌与攻击
- 子弹与伤害处理
- 战斗网格与地图管理
- 金币、经验和属性选择
- 战斗状态、胜负与关卡流程
通过该 Demo 可以重点了解以下内容:
Game / HotFix / AutoGenerated项目代码分层- HybridCLR 热更新工程结构
- Obfuz 代码混淆接入
- SceneProcedure 场景流程管理
- UI 界面组织与代码自动生成
- CSV 配置表及代码生成
- 资源同步与异步加载
- 炮塔、怪物、子弹等游戏对象的生命周期管理
- 命令系统、事件系统和状态管理
- 音效、特效与多语言模块的项目组织方式
- MyFramework 各个系统与实际游戏业务之间的协作方式
推荐使用:
以 Demo 仓库自身 `ProjectSettings/ProjectVersion.txt` 为准;MyFramework `1.1.x` 要求 Unity 6000.0 或更高版本。
克隆项目:
git clone https://github.com/ZHOURUIH/MyFramework_TDDemo.git使用 Unity 打开工程,等待 Package Manager 完成依赖加载后,打开启动场景:
Assets/Resources/Scene/start.unity
然后直接运行即可。
Demo 已经在 Packages/manifest.json 中配置 MyFramework、HybridCLR 和 Obfuz 等依赖,一般不需要再次手动导入框架。
Demo 主要用于展示 MyFramework 的项目结构、开发流程和实际使用方式。建议先运行 Demo 了解整体流程,再结合框架文档查看具体模块。
欢迎交流 Unity 游戏开发、框架设计、客户端开发、服务器开发等相关内容。
| 渠道 | 地址 |
|---|---|
| QQ交流群 | 805116283(MyFramework 官方交流群) |
| GitHub Issues | https://github.com/whimwindgames/MyFramework/issues |
| GitHub Discussions | 暂未开启 |
群内主要讨论:
- Unity 开发
- MyFramework 使用
- MyServerFramework 使用
- HybridCLR
- 游戏架构设计
- MMO 开发
- 网络同步
- 配置表工具链
服务器项目:
https://github.com/ZHOURUIH/MyServerFramework
支持:
- TCP
- UDP
- HTTP
- SQLite
- MySQL
- 消息自动生成
与客户端框架配套使用。
https://github.com/ZHOURUIH/MyFramework_Tool
如果这个项目对你有帮助,欢迎点一个 Star ⭐
你的支持会让我持续完善框架。
MyFramework 主体使用 MIT License。第三方组件及派生实现的许可证见包内 Third Party Notices.md。