已有 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;
}
🎮 MyFramework
一个偏传统游戏引擎开发思路的 Unity 游戏框架与工具链。
MyFramework 不是单纯封装 Unity API 的运行时框架,而是一套围绕实际商业项目开发流程整理出来的工程体系,重点关注:
框架从 0 开始设计并持续迭代多年,目前已经应用于:
支持平台:
✅ Windows ✅ Android ✅ iOS ✅ WebGL
📦 安装与使用
MyFramework 已支持通过 Unity Package Manager 以 Git 插件形式安装。
1. 通过 Git URL 安装
推荐使用发布分支安装,用户不需要手动指定具体版本号。
GitHub:
Gitee:
安装方式:
然后输入上面的 Git URL。
2. 初始化工程
安装插件后,新建工程中还没有默认启动场景、业务入口脚本和运行时配置文件,需要执行初始化菜单。
普通初始化:
带 HybridCLR + Obfuz 的初始化:
初始化会自动处理:
如果选择 HybridCLR + Obfuz 初始化,还会自动处理:
3. 输入系统设置
框架和默认启动场景仍然会使用部分旧输入接口,例如
UnityEngine.Input和StandaloneInputModule。如果工程启用了 Input System Package,并且运行时报:
需要在 Unity 中手动设置:
修改后通常需要重启 Unity 编辑器才能完全生效。
🚀 核心亮点
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. 长期维护
框架更偏向传统游戏引擎开发思路,强调明确的生命周期、明确的调用关系和统一的代码风格。
📁 主要目录结构
MyFramework 现在以 UPM Package 形式组织,框架代码位于:
Package 分层说明
安装插件后,用户工程中由初始化菜单生成项目入口和默认文件:
用户工程分层说明
🚀 快速开始
环境
推荐:
作者当前项目使用:
安装
在 Package Manager 中通过 Git URL 安装:
国内访问 GitHub 不稳定时,可以使用 Gitee:
初始化
安装完成后执行:
需要同时安装 HybridCLR + Obfuz 时执行:
初始化完成后,默认启动场景为:
直接打开该场景运行即可。
🎮 塔防游戏 Demo
为了更直观地展示 MyFramework 在实际 Unity 项目中的使用方式,现已提供一个基于本框架开发的完整塔防游戏 Demo:
项目地址:
https://github.com/ZHOURUIH/MyFramework_TDDemo
MyFramework_TDDemo 不是单个功能的代码片段,而是一个按照 MyFramework 项目结构组织的完整 Unity 工程,可以用于了解框架从项目启动、场景切换到具体游戏业务的整体落地方式。
Demo 内容
Demo 当前实现了以 Rogue-like 为核心的塔防战斗玩法,主要包含:
展示的框架能力
通过该 Demo 可以重点了解以下内容:
Game / HotFix / AutoGenerated项目代码分层运行 Demo
推荐使用:
克隆项目:
使用 Unity 打开工程,等待 Package Manager 完成依赖加载后,打开启动场景:
然后直接运行即可。
Demo 已经在
Packages/manifest.json中配置 MyFramework、HybridCLR 和 Obfuz 等依赖,一般不需要再次手动导入框架。⚡ EasyECS 数据布局优化
MyFramework 中包含独立的 EasyECS 插件,用于在尽量保持普通 OOP 开发方式的前提下,将热点数据自动转换为更适合 CPU Cache 的 SoA(Structure of Arrays)存储布局。
EasyECS 不是 Unity Entities / DOTS 的替代品,也不是一套完整 ECS Framework。
它主要解决的是:
普通 Struct 只需要添加 Attribute:
💬 社区交流
欢迎交流 Unity 游戏开发、框架设计、客户端开发、服务器开发等相关内容。
群内主要讨论:
📖 文档
详细说明请查看文档目录:
https://github.com/ZHOURUIH/MyFramework/tree/master/文档
🖥 配套服务器框架
服务器项目:
https://github.com/ZHOURUIH/MyServerFramework
支持:
与客户端框架配套使用。
📖 通用工具的源码
https://github.com/ZHOURUIH/MyFramework_Tool
⭐ Star
如果这个项目对你有帮助,欢迎点一个 Star ⭐
你的支持会让我持续完善框架。
扫码加入微信群,欢迎交流框架使用、工具链、热更新、游戏开发等内容
License
MIT