# Gameframework-at-FairyGUI
**Repository Path**: maped/Gameframework-at-FairyGUI
## Basic Information
- **Project Name**: Gameframework-at-FairyGUI
- **Description**: UnityGameFramework+FairyGUI+YooAsset+HybridCLR+Luban+UniTask
- **Primary Language**: C#
- **License**: Not specified
- **Default Branch**: main
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 17
- **Forks**: 4
- **Created**: 2023-07-07
- **Last Updated**: 2025-09-17
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# GameFramework-at-FairyGUI
GameFramework + FairyGUI +Luban + HybridCLR + YooAsset + UniTask + GeekServer
实现初衷:在工作中接触到了FairyGUI与HybridCLR,真的十分好用,但git上很难找到使用FairyGUI设计的纯C#UI管理模块。在看到ALEXTANGXIAO开发的Gameframework-at-YooAsset后,决定在此基础上进行扩展(说白了就是缝合怪),以满足个人开发需求。经验有限,望指正。
## 环境要求
* [.NET 8.x SDK](https://dotnet.microsoft.com/zh-cn/download/dotnet/8.0)
* [Unity 2022.3.8f1c1](unityhub://2022.3.8f1c1/4ec8ee1b2212)(可升级,注意可能须同时升级HybridCLR)
* [FairyGUI](https://fairygui.com/)
* [Rider](https://www.jetbrains.com/zh-cn/rider/) (可使用VSCode或VisualStudio,自行配置)
* 另外:Windows需要安装VisualStudio,且所需模块如下。Mac则需要安装XCode以及XCode Command Line Tools。

## 技术与架构
```
// 项目结构设计
BuildCLI // 构建工具
Client // 客户端代码
└── UIProject // FairyUI工程
Luban // 配置工具集
└── Config // 表配置与模板文件
Server // GeekServer服务端(可剥离)
```
```
// 程序集划分设计
Assets/GameMain/Scripts
├── Editor // 编辑器程序集
├── HotFix // 游戏热更程序集目录
| ├── GameProto // 游戏配置协议程序集
| ├── BattleCore // 游戏核心战斗程序集
| └── GameLogic // 游戏业务逻辑程序集
└── Runtime // Runtime程序集
Asset/UnityGameFramework/Scripts
├── Editor // 框架编辑器程序集
└── Runtime // 框架运行时程序集
```
## WorkFlow
### 客户端结构介绍
#### AssetRaw: 资源目录
注:如需删除目录,需将YooAssetsCollection中对应的目录收集信息删除。以下均为受资源管理的目录,如需新增,需要在YooAssets中同步添加。
* Actor,角色目录
* Atlas,图集目录
* Audios,音频目录
* Configs,表配置生成目录
* DLL,热更新程序集目录
* Effects,特效目录
* Fonts,字体文件目录
* Materials,材质目录
* Prefabs,预制体目录
* Scenes,场景目录
* Shaders,Shader及变体收集目录
* UI,FairyGUI文件生成目录
* Version,版本信息文件目录
#### GameMain: 主程序代码目录
* AssetSetting,YooAsset资源配置文件目录
* Libraries,主程序引用的三方库目录
* Resources,首包资源目录:
+ Settings,系统设置,首包多语言设置目录
+ UI,首包UI资源
* Scripts,主程序代码
+ Editor, 编辑器扩展代码
+ HotFix, 主逻辑代码(可热更新代码)
- GameLogic,逻辑代码(注意,其中Generate为FairyGUI生成的组件代码,为方便主逻辑中调用UI组件将其划分为同一程序集,如需自定义生成位置,需要将UIProject/Game工程里生成路径配置为指定目录)。GameApp.cs为主逻辑代码入口。
- GameProto,表结构与网络协议等生成目录
+ Runtime,首包逻辑代码(不可热更新)。GameEntry.cs为模块启动主入口
- Extention,扩展方法
- Loading,首包UI逻辑
- NativeBridge,APP桥接逻辑
- Network,Protobuf长链接实现
- Procedure,启动流程逻辑
- Util,工具类
#### UnityGameFramework: 框架代码目录
* Libraries,框架依赖的三方库
* ResRaw,框架配置与必须资源
* Scrips (略,与GameFramework相似)
### UI及功能制作流程
UI使用FairyGUI编辑器制作,项目分为Game(主游戏工程)和Launch(启动器工程,即首包UI)。Game中除Fairy生成的目录外还有一个plugins,用于自定义组件partial代码。生成资源与代码的路径在项目设置中,注意Game和Launch生成路径不同,且生成代码不同。Launch部分的管理器见[UILoadMgr](Client/Assets/GameMain/Scripts/Runtime/Loading/UILoadMgr.cs),Game部分则由[UIComponent](Client/Assets/UnityGameFramework/Scripts/Runtime/UI/UIComponent.cs)管理。UI制作请自行前往官网查看教程。
#### UI模块功能创建
1. 在FairyEditor中制作一个UI界面,在其导出设置中选择为其发布代码,生成的代码会在GameLogic/Generate中。
2. 如果导出的是一个全新的包(Fairy中Package的概念),则发布后需要点击引擎工具栏中`GameFramework/FairyGUI/导出UIBinder`选项,为新生成的包初始化一个组件绑定。
3. 新建一个界面类继承自UIForm,泛型类型为界面组件类型,如示例[LoginForm](Client/Assets/GameMain/Scripts/HotFix/GameLogic/Login/UI/LoginForm.cs)中`UI_login_main`为对应UI组件生成类型。若为复杂界面,UIForm还提供带Controller和Model的泛型。
4. 重写`CreateConfig`方法,为其返回一个界面参数。参数详情见其对应的返回类型中的描述。
5. 调用`GameModule.UI.OpenForm()`即可打开对应界面
6. 使用MVC时其生命周期见基类`UIFormBase`,Model>Controller>View。
### 资源打包
使用了YooAsset替代了GF原生资源管理,可查看其[快速入门手册](https://www.yooasset.com/docs/guide-editor/QuickStart)了解整个资源管理与构建过程。构建结果默认放在`Assets/StreamingAssets`下。
### 项目打包
1. 打包前须进行一定的设置,如下图打开GF全局设置面板,整体分为两大模块:框架设置,Hybrid设置。


2. 切换到目标环境:由不同的宏控制,可分别处理内部测试整包、内部测试分包、正式整包、正式分包等。具体划分可在代码[Define.cs](Client/Assets/UnityGameFramework/Scripts/Runtime/GameSettings/Enum/Define.cs)中查看。

3. 手动构建出包。如图打开菜单,选择对应平台进行构建。构建流程:切换至目标平台->切换至目标渠道环境->Hybrid AOT代码裁剪->代码DLL构建->资源收集与构建->APP构建

4. 除手动构建之外,也可以通过外部管线处理,批处理脚本见根目录下`BuildCLI`文件夹。
5. 若按照默认设置打的分包,资源会放在`Assets/StreamingAssets`下,将其中的内容拷贝到CDN或桶中即可。
### 代码与资源热更新
1. 如已进行过项目打包,目标环境正确,即已经生成了AOT代码与相应裁剪,则只需找到菜单中对应热更按钮点击即可。默认设置情况下,资源会放在`Assets/StreamingAssets`下,将其中的内容拷贝到CDN或桶中并替换掉原资源即可。

2. 如中途进行了开发,在未重新构建AOT的情况下,只需要切换至目标热更平台再执行第一步即可。如有AOT部分的修改,则需要重新构建包。
### 其他功能
GeekServer服务启动测试:见Server下README启动流程。已支持Protobuf下TCP和Websocket协议连接。
## 特别鸣谢
#### YooAsset - YooAsset是一套商业级经历百万DAU游戏验证的资源管理系统。
#### FairyGUI - FairyGUI是一个重视设计,摈弃脚本与配置的专业游戏UI解决方案。
#### HybridCLR - HybridCLR是一个特性完整、零成本、高性能、低内存的近乎完美的Unity全平台原生c#热更方案。
#### GameFramework-at-YooAsset - GameFramework-at-YooAsset 是ALEXTANGXIAO大佬针对GameFramework资源系统二次开发的Unity游戏框架
#### GeekServer - GeekServer GeekServer 是一个开源的分区分服的游戏服务器框架,采用 C# .Netcore 开发,开发效率高,性能强,跨平台,并内置不停服热更新机制。可以满足绝大部分游戏类型的需求,特别是和 Unity3D 协同开发更佳。