Unity 商用级别开发框架,经过了多年经验沉淀.一个在unity上使用的网络游戏客户端开发框架,为unity所有使用方式提供完善的封装和管理,只需要专注于游戏逻辑的编写
Unity 商用级别开发框架,经过了多年经验沉淀.一个在unity上使用的网络游戏客户端开发框架,为unity所有使用方式提供完善的封装和管理,只需要专注于游戏逻辑的编写
一个偏传统游戏引擎开发思路的 Unity 游戏框架与工具链。
MyFramework 不是单纯封装 Unity API 的运行时框架,而是一套围绕实际商业项目开发流程整理出来的工程体系,重点关注:
框架从 0 开始设计并持续迭代多年,目前已经应用于:
支持平台:
✅ Windows ✅ Android ✅ iOS ✅ WebGL
MyFramework 已支持通过 Unity Package Manager 以 Git 插件形式安装。
推荐使用发布分支安装,用户不需要手动指定具体版本号。
GitHub:
https://github.com/ZHOURUIH/MyFramework.git?path=/Packages/com.zhourui.myframework
Gitee:
https://gitee.com/inothingtodo/MyFramework.git?path=/Packages/com.zhourui.myframework
安装方式:
Window
Package Manager
+
Install package from git URL...
然后输入上面的 Git URL。
GitHub 访问不稳定时,可以使用 Gitee 地址。
安装插件后,新建工程中还没有默认启动场景、业务入口脚本和运行时配置文件,需要执行初始化菜单。
普通初始化:
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 成员变量
↓
生成节点查找代码
↓
业务逻辑代码
支持:
使用 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
这种分层方式可以让框架层和业务层都有较高的热更新能力,同时又保留必要的启动稳定性。
| 项目 | 状态 |
|---|---|
| 持续迭代 | 5+ 年 |
| 当前作者项目 Unity 版本 | Unity 6000.2 |
| 推荐 Unity 版本 | Unity 2022.3 LTS 或更高 |
| 已用于个人 MMORPG 项目 | ✅ |
| 已用于公司手游项目 | ✅ |
| 客户端项目规模 | 20万+ 行 |
| 服务端项目规模 | 20万+ 行 |
| GitHub Star | 596+ |
集成 HybridCLR。
支持:
除启动和热更新下载逻辑外,大部分代码都可以参与热更新。
集成 Obfuz。
支持:
用于提升发布后的代码安全性。
提供完整 UI 封装,避免业务层直接访问 Unity 原生组件。
支持:
框架尽量不依赖 UGUI 的锚点和自动布局组件,而是倾向于通过代码显式控制 UI 的位置、尺寸、显示状态和输入逻辑。
不使用 UGUI 默认 EventSystem 作为主要输入派发方式,而是自己实现统一输入检测。
支持:
部分 Unity 原生组件仍然可以按需使用 EventSystem,例如 ScrollRect。
统一封装资源访问。
支持:
业务层无需关心资源来自编辑器还是 AssetBundle。
支持:
提供:
其中按位序列化可进一步降低网络带宽占用。
命令系统用于封装具有完整逻辑意义的事件。
它可以用于:
示例:
数据改变
↓
发送命令
↓
更新数据
↓
刷新界面
↓
网络同步
调用方只需要关心触发了什么事件,而不需要关心事件内部涉及哪些模块。
部分逻辑使用组件思想进行组织,通过组合代替复杂继承。
Character
├─ ComponentA
├─ ComponentB
└─ ComponentC
适合拆分可复用、可独立更新的功能逻辑。
基于 PrefabPool 抽象出 EffectPool。
支持:
QuickEffect 适用于非循环、不带拖尾、需要频繁同时播放的粒子特效。
包含大量基础工具函数,例如:
同时提供大量 Scope 设计,用于实现类似 C++ RAII 的自动释放与状态恢复。
框架包含大量单元测试,主要覆盖:
这部分测试用于保证框架中的基础工具函数和核心逻辑长期稳定。
Editor 中提供了大量项目检查和辅助工具,例如:
这些工具主要用于减少大型项目长期维护过程中的隐性错误。
| 模块 | 状态 |
|---|---|
| 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 自动行为和第三方插件的过度依赖。
框架中很多地方倾向于显式执行,而不是依赖隐藏生命周期。
优先解决商业项目中真正会遇到的问题:
框架更偏向传统游戏引擎开发思路,强调明确的生命周期、明确的调用关系和统一的代码风格。
MyFramework 现在以 UPM Package 形式组织,框架代码位于:
Packages
└── com.zhourui.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 2022.3 LTS 或更高版本
作者当前项目使用:
Unity 6000.2
在 Package Manager 中通过 Git URL 安装:
https://github.com/ZHOURUIH/MyFramework.git?path=/Packages/com.zhourui.myframework#release
国内访问 GitHub 不稳定时,可以使用 Gitee:
https://gitee.com/inothingtodo/MyFramework.git?path=/Packages/com.zhourui.myframework#release
安装完成后执行:
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 项目代码分层推荐使用:
Unity 2022.3 LTS
克隆项目:
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 了解整体流程,再结合框架文档查看具体模块。
MyFramework 中包含独立的 EasyECS 插件,用于在尽量保持普通 OOP 开发方式的前提下,将热点数据自动转换为更适合 CPU Cache 的 SoA(Structure of Arrays)存储布局。
EasyECS 不是 Unity Entities / DOTS 的替代品,也不是一套完整 ECS Framework。
它主要解决的是:
已有 OOP 项目不希望整体迁移 ECS,但又希望针对角色、怪物、子弹、位置、速度、战斗属性等大量热点数据进行 SoA 优化的问题。
普通 Struct 只需要添加 Attribute:
using EasyECS;
[ECS]
public struct RoleData
{
public int mHP;
public float mSpeed;
public float mPositionX;
public float mPositionY;
[NotECS] public int mID;
[NotECS] public int mModelID;
}
欢迎交流 Unity 游戏开发、框架设计、客户端开发、服务器开发等相关内容。
| 渠道 | 地址 |
|---|---|
| QQ交流群 | 805116283(MyFramework 官方交流群) |
| GitHub Issues | https://github.com/ZHOURUIH/MyFramework/issues |
| GitHub Discussions | 暂未开启 |
群内主要讨论:
详细说明请查看文档目录:
https://github.com/ZHOURUIH/MyFramework/tree/master/文档
服务器项目:
https://github.com/ZHOURUIH/MyServerFramework
支持:
与客户端框架配套使用。
https://github.com/ZHOURUIH/MyFramework_Tool
如果这个项目对你有帮助,欢迎点一个 Star ⭐
你的支持会让我持续完善框架。
MIT
No open issues yet, or sync has not completed.