Skip to content

About

Reusable Unity game framework with UI, networking, resources and HybridCLR hot update tooling

Resources

Stars

0 stars

Watchers

0 watching

Forks

Latest commit

 

History

425 Commits

Folders and files

Repository files navigation

🎮 MyFramework

一个偏传统游戏引擎开发思路的 Unity 游戏框架与工具链。

MyFramework 不是单纯封装 Unity API 的运行时框架,而是一套围绕实际商业项目开发流程整理出来的工程体系,重点关注:

  • 热更新分层
  • UI 代码生成
  • 配置表工具链
  • 网络协议代码生成
  • 资源管理
  • 对象池
  • 工程检查
  • 低 GC
  • 强生命周期控制
  • 客户端与服务器协作

框架从 0 开始设计并持续迭代多年,目前已经应用于:

  • 个人商业项目(MMORPG / 传奇类游戏)
  • 公司手游项目

支持平台:

✅ Windows ✅ Android ✅ iOS ✅ WebGL


📦 安装与使用

MyFramework 已支持通过 Unity Package Manager 以 Git 插件形式安装。

1. 通过 OpenUPM 安装(推荐)

在 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.8"
  }
}

也可以使用 OpenUPM CLI:

openupm add com.whimwindgames.myframework

2. 通过 Git URL 安装

生产项目应固定版本标签:

https://github.com/whimwindgames/MyFramework.git?path=/Packages/com.whimwindgames.myframework#com.whimwindgames.myframework/1.1.0-preview.8

安装方式:

Window
    Package Manager
        +
            Install package from git URL...

然后输入上面的 Git URL。Git 安装仍需先配置 OpenUPM scopes,以便解析 UniTask、HybridCLR 和 Obfuz 依赖。自托管 Git 服务作为源码镜像使用,OpenUPM 的公开发布源固定为 GitHub。


3. 初始化工程

已有启动、场景、输入和 Build Settings 的成熟项目应先执行安全接入:

MyFramework/初始化/安全接入成熟项目

安全接入只生成框架设置,不复制模板或修改宿主场景、输入和 Build Settings。贴图、音频和模型的框架导入规则也只作用于 Assets/GameResources。

安装插件后,全新工程中还没有默认启动场景、业务入口脚本和运行时配置文件,才需要执行完整初始化菜单。

普通初始化:

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

3. 输入系统设置

框架和默认启动场景仍然会使用部分旧输入接口,例如 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 最主要的特点不是某一个单独模块,而是一套比较完整的项目开发工作流。

1. UI 自动生成

通过在 UI Prefab 上配置需要访问的节点,自动生成 UI 脚本代码与注册逻辑,减少大量重复的查找节点和绑定代码。

UI Prefab
    ↓
UGUIGenerator
    ↓
生成 UI 成员变量
    ↓
生成节点查找代码
    ↓
业务逻辑代码

支持:

  • 单节点生成
  • 数组节点生成
  • 自动生成成员变量
  • 自动生成 assignWindow
  • 自动生成构造代码
  • 自动生成注册代码
  • 保留手写逻辑代码

2. 配置表工具链

使用 CSV 作为配置表格式,并配套自研表格编辑器。

配置表工具链支持:

  • 字段类型检查
  • 枚举合法性检查
  • ID 唯一性检查
  • 表格引用检查
  • 资源路径检查
  • 客户端代码生成
  • 服务器代码生成
  • 运行时代码检查逻辑生成

配置表编辑阶段即可发现大量错误,减少运行时问题。

CSV 配置表
    ↓
表格编辑器
    ↓
字段检查 / 引用检查 / 路径检查
    ↓
生成客户端表格代码
    ↓
生成服务器表格代码

3. 网络协议代码生成

根据协议配置自动生成客户端与服务器消息代码。

支持:

  • 消息类生成
  • 字段序列化生成
  • 字段反序列化生成
  • 消息注册代码生成
  • 客户端消息代码生成
  • 服务器消息代码生成
  • 手写逻辑代码保留
协议配置
    ↓
协议生成工具
    ↓
生成客户端消息代码
    ↓
生成服务器消息代码
    ↓
自动注册消息

4. 客户端 + 服务器配套

MyFramework 有配套服务器框架:

https://github.com/ZHOURUIH/MyServerFramework

客户端与服务器可以共享协议生成、配置表生成等工具链,适合需要长期维护的中大型项目。


5. 热更新分层

框架代码按照是否可热更进行了明确分层。

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 热更新

集成 HybridCLR。

支持:

  • Frame 层热更新
  • Game 层热更新
  • 大部分业务逻辑热更新

除启动和热更新下载逻辑外,大部分代码都可以参与热更新。


🔒 Obfuz 混淆

集成 Obfuz。

支持:

  • 符号混淆
  • 字符串加密
  • 代码保护

用于提升发布后的代码安全性。


🖥 UI 框架

提供完整 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 并不是为了追求最新潮的架构,也不是为了追求最少代码量。

它更关注:

1. 可维护

代码定位清晰,问题出现后能够快速查找。

2. 可控

尽量减少对 Unity 自动行为和第三方插件的过度依赖。

框架中很多地方倾向于显式执行,而不是依赖隐藏生命周期。

3. 可落地

优先解决商业项目中真正会遇到的问题:

  • 性能
  • GC
  • 热更新
  • 工具链
  • 资源管理
  • UI 开发效率
  • 客户端与服务器协议一致性

4. 长期维护

框架更偏向传统游戏引擎开发思路,强调明确的生命周期、明确的调用关系和统一的代码风格。


📁 主要目录结构

MyFramework 现在以 UPM Package 形式组织,框架代码位于:

Packages
└── com.whimwindgames.myframework
    ├── Runtime
    │   ├── Frame_Base
    │   ├── Frame_Game
    │   └── Frame_HotFix
    ├── Editor
    │   ├── Editor_Frame
    │   └── EditorRes_Frame
    ├── ProjectTemplate~
    ├── package.json
    └── README.md

Package 分层说明

目录 说明
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.8

初始化

成熟项目执行:

MyFramework/初始化/安全接入成熟项目

全新项目需要模板时执行:

MyFramework/初始化/初始化框架

需要同时安装 HybridCLR + Obfuz 时执行:

MyFramework/初始化/初始化框架+HybridCLR+Obfuz

初始化完成后,默认启动场景为:

Assets/Resources/Scene/start.unity

直接打开该场景运行即可。



🎮 塔防游戏 Demo

为了更直观地展示 MyFramework 在实际 Unity 项目中的使用方式,现已提供一个基于本框架开发的完整塔防游戏 Demo:

项目地址:

https://github.com/ZHOURUIH/MyFramework_TDDemo

MyFramework_TDDemo 不是单个功能的代码片段,而是一个按照 MyFramework 项目结构组织的完整 Unity 工程,可以用于了解框架从项目启动、场景切换到具体游戏业务的整体落地方式。

Demo 内容

Demo 当前实现了以 Rogue-like 为核心的塔防战斗玩法,主要包含:

  • 炮塔放置、交换和出售
  • 怪物波次生成
  • 地面与飞行怪物路线
  • 炮塔索敌与攻击
  • 子弹与伤害处理
  • 战斗网格与地图管理
  • 金币、经验和属性选择
  • 战斗状态、胜负与关卡流程

展示的框架能力

通过该 Demo 可以重点了解以下内容:

  • Game / HotFix / AutoGenerated 项目代码分层
  • HybridCLR 热更新工程结构
  • Obfuz 代码混淆接入
  • SceneProcedure 场景流程管理
  • UI 界面组织与代码自动生成
  • CSV 配置表及代码生成
  • 资源同步与异步加载
  • 炮塔、怪物、子弹等游戏对象的生命周期管理
  • 命令系统、事件系统和状态管理
  • 音效、特效与多语言模块的项目组织方式
  • MyFramework 各个系统与实际游戏业务之间的协作方式

运行 Demo

推荐使用:

以 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

如果这个项目对你有帮助,欢迎点一个 Star ⭐

你的支持会让我持续完善框架。


License

MyFramework 主体使用 MIT License。第三方组件及派生实现的许可证见包内 Third Party Notices.md。

About

Reusable Unity game framework with UI, networking, resources and HybridCLR hot update tooling

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages