# Cloudbound Bounce
**Repository Path**: Absure/cloudbound-bounce
## Basic Information
- **Project Name**: Cloudbound Bounce
- **Description**: No description available
- **Primary Language**: Unknown
- **License**: MIT
- **Default Branch**: master
- **Homepage**: None
- **GVP Project**: No
## Statistics
- **Stars**: 0
- **Forks**: 0
- **Created**: 2026-05-20
- **Last Updated**: 2026-05-20
## Categories & Tags
**Categories**: Uncategorized
**Tags**: None
## README
# HoppyGame Framework
[]()
[](./LICENSE.md)
[](https://unity.com)
[]()
[](https://qm.qq.com/q/bswKDNjWJU)
[]()
> HoppyGame Framework 是一个现代化的 Unity 游戏开发框架,采用模块化架构设计,提供热更新、资源管理、状态机、对象池等核心功能,支持快速开发 Unity 游戏项目。
## ✨ 核心特性
- 🏗️ **双层架构设计**: Runtime(框架层)+ HotUpdate(业务层),职责清晰、易于维护
- 🎯 **统一访问入口**: 所有模块通过 `GameMain` 统一访问,降低学习成本
- 🔄 **状态机系统**: 强大的 FSM 状态管理,支持游戏流程和角色 AI
- 📦 **对象池系统**: 高效的对象复用机制,优化内存和 GC 性能
- ⚡ **高性能 Tick**: HashSet 优化的 Tick 系统,O(1) 注册/注销,支持 Update/FixedUpdate/LateUpdate
- 🎵 **音频系统**: 完整的音频解决方案,支持 FMOD 和 Unity BuiltIn
- 📋 **流程管理**: 基于 FSM 的游戏生命周期管理(热更新 → 资源下载 → 进入游戏)
- 🔧 **资源管理**: 集成 YooAsset,带引用计数和自动缓存
- 🔥 **热更新支持**: HybridCLR 代码热更新技术
- 🌐 **网络通信**: 内置 WebSocket 系统,支持自动重连和心跳保活
- ⏱️ **计时器系统**: 倒计时、循环定时、延迟执行,基于 UniTask
- 💾 **存档系统**: 多存档槽、加密持久化,支持 JSON/Binary
- 🔴 **红点系统**: 前缀树优化,支持三种红点类型和可视化配置
- 📊 **配置表系统**: 集成 Luban,类型安全的数据表访问
- 📝 **完善文档**: 完整的 XML 注释 + Docs 文档,符合企业级代码规范
## 📋 环境要求
- **Unity 版本**: 2019.4 或更高版本(推荐 2021.3 LTS)
- **.NET 版本**: .NET Framework 4.6+ / .NET Standard 2.0+
- **支持平台**: Windows, Android, iOS, macOS, Linux, WebGL
## 🚀 快速开始
### 安装方式
#### 方法一:Git 克隆(推荐)
```bash
git clone https://gitee.com/Absure/hoppy-game_-dbf.git
```
#### 方法二:作为子模块添加
```bash
git submodule add https://gitee.com/Absure/hoppy-game_-dbf.git Assets/HoppyGame
```
### 基础使用
```csharp
// ===== 统一访问入口(HotUpdate 层) =====
// 业务系统(System 层)通过 GameMain.XXX 直接访问
var ui = GameMain.UI; // UI 系统
var audio = GameMain.Audio; // 音频系统
var redDot = GameMain.RedDot; // 红点系统
var dataTable= GameMain.DataTable; // 配置表系统
var timer = GameMain.Timer; // 计时器系统
var ws = GameMain.WebSocket; // WebSocket 系统
var save = GameMain.SaveGame; // 存档系统
// 框架模块(HGComponent 层)通过 GetModule 获取
var tick = GameMain.GetModule();
var resource = GameMain.GetModule();
var fsm = GameMain.GetModule();
var pools = GameMain.GetModule();
// ===== 实际使用示例 =====
// 1. 异步加载资源(带引用计数和缓存)
var prefab = await GameMain.Resource.Asset.LoadAssetAsync("Player");
// 用完后释放引用
GameMain.Resource.Asset.ReleaseAsset("Player");
// 2. 对象池
var bullet = GameMain.GetModule().Pull("Bullet");
GameMain.GetModule().Push(bullet);
// 3. 播放音效 / BGM
GameMain.Audio.PlaySound("UI_Click");
GameMain.Audio.PlayBGM("Main_Theme");
// 4. 倒计时(带取消支持)
var cts = new CancellationTokenSource();
GameMain.Timer.CountdownAsync(30f,
onTick: remaining => Debug.Log($"剩余 {remaining}s"),
onComplete: () => Debug.Log("时间到!"),
cancellationToken: cts.Token).Forget();
// 5. 延迟执行
GameMain.Timer.DelayAsync(2f, () => Debug.Log("2秒后执行")).Forget();
// 6. WebSocket 连接
GameMain.WebSocket.OnConnected += () => Debug.Log("已连接");
GameMain.WebSocket.OnMessageReceived+= msg => Debug.Log($"收到: {msg}");
GameMain.WebSocket.Connect("wss://api.example.com");
await GameMain.WebSocket.Send("Hello Server");
// 7. 存档(多存档槽)
await GameMain.SaveGame.SaveData("PlayerData", playerData, slot: 0);
var data = GameMain.SaveGame.LoadData("PlayerData", slot: 0);
// 8. 红点系统
GameMain.RedDot.SetDirty("main/mail");
// 9. 配置表
var itemConfig = GameMain.DataTable.GetTable();
// 10. 注册 Tick(Update/FixedUpdate/LateUpdate)
// 让你的类实现 ITickable / IFixedTickable / ILateTickable 接口
GameMain.GetModule().Register(this); // 注册
GameMain.GetModule().Unregister(this); // 注销
```
## 🏗️ 架构设计
HoppyGame 框架采用**双层架构 + 统一访问入口**设计:
```
┌─────────────────────────────────────────────────────────────────────┐
│ 统一访问入口 (GameMain) │
│ GameMain.XXX — 所有业务层模块的统一入口 │
└────────────────────────────┬────────────────────────────────────────┘
│
┌───────────────┴───────────────┐
│ │
▼ ▼
┌────────────────────────┐ ┌────────────────────────────┐
│ Runtime 层(框架层) │ │ HotUpdate 层(业务层) │
│ 不可热更新 · AOT │ │ 可热更新 · HybridCLR │
├────────────────────────┤ ├────────────────────────────┤
│ • GameEntry │ │ • GameMain (业务入口) │
│ • GameModule │ │ • UISystem │
│ • Tick (Update驱动) │ │ • AudioSystem │
│ • Resource + Asset │ │ • RedDotSystem │
│ • ObjectPools │ │ • DataTableSystem │
│ • FsmManager │ │ • TimerSystem │
│ • ProcedureManager │ │ • WebSocketSystem │
│ • Launcher │ │ • SaveGameSystem │
└────────────────────────┘ └────────────────────────────┘
│ │
└───────────────┬───────────────┘
▼
┌──────────────────────────┐
│ 第三方库(Plugins) │
│ • YooAsset(资源管理) │
│ • HybridCLR(热更新) │
│ • UniTask(异步) │
│ • Luban(配置表) │
│ • NativeWebSocket │
│ • SaveGameFree(存档) │
└──────────────────────────┘
```
### 核心设计原则
- **双层架构**: Runtime 层(框架基础设施,不可热更新)+ HotUpdate 层(业务逻辑,可热更新)
- **统一访问**: 业务层通过 `GameMain.XXX` 访问系统,框架层通过 `GameMain.GetModule()` 访问组件
- **引用计数**: 资源系统支持引用计数和自动缓存,防止重复加载和内存泄漏
- **单一职责**: 每个模块负责特定的功能领域,不跨层依赖
- **性能优化**: HashSet Tick、无 GC 释放列表、自动释放闲置资源
- **代码规范**: 完整的 XML 注释,符合企业级开发标准
## 📁 项目结构
```
HoppyGame_DBF/
├── Assets/
│ ├── GameMain/
│ │ ├── Scripts/
│ │ │ ├── Runtime/ # 运行时核心(不可热更新)
│ │ │ │ ├── Base/ # 基础组件
│ │ │ │ │ ├── HGComponent.cs # 组件基类
│ │ │ │ │ └── Singleton.cs # 单例基类
│ │ │ │ ├── Modules/ # 核心模块
│ │ │ │ │ ├── Fsm/ # 有限状态机
│ │ │ │ │ ├── ObjectPool/ # 对象池(ObjectPools + SinglePoolData)
│ │ │ │ │ ├── Procedure/ # 流程管理(热更新流程)
│ │ │ │ │ ├── Resource/ # 资源管理(Resource + Asset + AssetCache)
│ │ │ │ │ ├── TickUpdate/ # Tick 驱动系统
│ │ │ │ │ └── Launcher/ # 启动器
│ │ │ │ ├── GameEntry.cs # Unity 入口,注册所有 HGComponent
│ │ │ │ └── GameModule.cs # 模块管理器(单例)
│ │ │ ├── HotUpdate/ # 热更新代码(可热更新)
│ │ │ │ └── GameLogic/
│ │ │ │ ├── GameMain.cs # 热更新入口,注册所有 System
│ │ │ │ └── SystemModules/
│ │ │ │ ├── UIModule/ # UI 系统
│ │ │ │ ├── Audio/ # 音频系统(FMOD + BuiltIn)
│ │ │ │ ├── RedDotModule/ # 红点系统
│ │ │ │ ├── DataTableModule/# 配置表系统
│ │ │ │ ├── Timer/ # 计时器系统
│ │ │ │ ├── WebSocket/ # WebSocket 系统
│ │ │ │ └── SaveGame/ # 存档系统
│ │ │ └── Editor/ # 编辑器工具
│ └── Plugins/ # 第三方插件
├── Docs/ # 项目文档
│ ├── 00_框架总览/
│ ├── 01_核心系统/
│ ├── 02_管理器模块/
│ └── 03_功能系统/
├── Tools/
│ └── DataTables/ # 数据表工具(Luban)
├── Bundles/ # 资源包
└── HybridCLRData/ # HybridCLR 数据
```
## 🛠️ 核心模块
### 🔄 有限状态机 (FSM)
强大的状态管理解决方案,支持角色 AI、UI 状态、游戏流程等多种场景。
- 类型安全的状态转换
- 完整的进入/更新/退出生命周期
- 支持多状态机并发
### ⚡ Tick 系统
基于 HashSet 的高性能帧更新驱动,替代 MonoBehaviour Update。
- 支持 Update / FixedUpdate / LateUpdate 三种时机
- O(1) 注册和注销,自动防止重复注册
- 异常对象延迟批量移除,不影响其他对象
### 📦 对象池系统
高效的对象复用机制,显著提升性能,减少 GC 压力。
- 自动对象回收和复用
- 支持预热和容量管理
- YooAsset / Resources 双加载模式
### 🔧 资源管理系统
集成 YooAsset,带引用计数和 LRU 缓存的现代化资源管理。
- 同步/异步加载(支持进度回调)
- 引用计数防止提前卸载
- 自动释放闲置资源(可配置间隔)
- 原始文件(JSON/Binary)加载支持
### 📋 流程管理系统
基于 FSM 的游戏生命周期管理,从启动到运行的完整流程控制。
- 热更新流程:版本检查 → 资源下载 → 初始化
- 清晰的 Procedure 抽象,易于自定义扩展
### 🎵 音频系统
完整的音频管理解决方案,支持 FMOD 和 Unity 内置音频双模式。
- BGM / SFX 分组管理
- 音量控制、淡入淡出
- 异步资源加载
### ⏱️ 计时器系统 (TimerSystem)
基于 UniTask 的轻量计时器,全部支持 CancellationToken 取消。
- `CountdownAsync` — 整秒倒计时
- `CountdownWithProgressAsync` — 平滑进度倒计时(0~1)
- `IntervalAsync` — 循环定时执行
- `DelayAsync` — 单次延迟执行
- `LoopWithProgressAsync` — 带进度循环定时
### 🌐 WebSocket 系统 (WebSocketSystem)
功能完整的 WebSocket 客户端,基于 NativeWebSocket。
- 自动重连(可配置最大次数和间隔)
- 心跳保活(可配置间隔)
- 服务端主动断连自动触发重连
- 连接/消息/错误/断开事件回调
### 💾 存档系统 (SaveGameSystem)
基于 SaveGameFree 的多存档槽持久化系统。
- 支持任意可序列化类型
- JSON / Binary 双序列化格式
- AES 加密(可关闭)
- 多存档槽(Slot 0, 1, 2...)
- 自动重试(失败最多 3 次)
### 🔴 红点系统 (RedDotSystem)
前缀树优化的红点通知系统,支持可视化配置。
- 三种红点类型:纯红点、数字红点、自定义
- 前缀树结构,脏标记只向上传播
- 编辑器工具:可视化配置、代码生成
### 📊 配置表系统 (DataTableSystem)
集成 Luban 的类型安全配置表系统。
- 自动生成 C# 类,类型安全
- 支持 JSON / Binary 格式
- 与 YooAsset 资源加载集成
## 🎯 开发状态
### ✅ 已完成功能
- [x] 双层架构设计(Runtime / HotUpdate)
- [x] 统一模块访问入口(GameMain)
- [x] 依赖注入系统(IOC 容器)
- [x] 状态机系统(FsmManager)
- [x] 对象池系统(HashSet 优化 Tick,O(1))
- [x] Tick 系统(Update / FixedUpdate / LateUpdate)
- [x] 流程管理系统(ProcedureManager)
- [x] 资源管理系统(YooAsset + 引用计数 + 自动缓存)
- [x] 热更新支持(HybridCLR)
- [x] UI 系统(链式 API + 类型处理器)
- [x] 音频系统(FMOD + BuiltIn 双模式)
- [x] 红点系统(前缀树优化 + 可视化编辑器)
- [x] 配置表系统(Luban)
- [x] 计时器系统(UniTask + CancellationToken)
- [x] WebSocket 系统(自动重连 + 心跳保活)
- [x] 存档系统(多槽位 + 加密 + 自动重试)
- [x] 数据持久化(SaveGame)
- [x] 完整的 XML 注释
### 🚧 开发中功能
- [ ] 性能监控工具(Profile 面板)
- [ ] 本地化支持(多语言)
### 📋 计划功能
- [ ] 自动化测试框架
- [ ] CI/CD 集成
- [ ] 编辑器工具增强(框架调试窗口)
## 📖 文档
| 分类 | 文档 |
|------|------|
| 框架总览 | [框架完整使用指南](./Docs/00_框架总览/框架完整使用指南.md) |
| 核心系统 | [有限状态机 (FSM)](./Docs/01_核心系统/FSM/) · [流程管理](./Docs/01_核心系统/Procedure/) · [启动流程](./Docs/01_核心系统/LaunchSystem/) |
| 管理器模块 | [对象池](./Docs/02_管理器模块/ObjectPool/) · [音频管理器](./Docs/02_管理器模块/AudioManager/) · [资源管理器](./Docs/02_管理器模块/Resource/) |
| 功能系统 | [红点系统](./Docs/03_功能系统/RedPointSystem/) · [计时器](./Docs/03_功能系统/TimerSystem/) · [WebSocket](./Docs/03_功能系统/WebSocketSystem/) · [存档系统](./Docs/03_功能系统/SaveGameSystem/) |
## 🤝 贡献指南
我们欢迎各种形式的贡献!
1. Fork 本仓库
2. 创建特性分支 (`git checkout -b feature/AmazingFeature`)
3. 提交更改 (`git commit -m 'Add some AmazingFeature'`)
4. 推送到分支 (`git push origin feature/AmazingFeature`)
5. 创建 Pull Request
### 开发环境设置
```bash
# 克隆项目
git clone https://gitee.com/Absure/hoppy-game_-dbf.git
# 进入项目目录
cd hoppy-game_-dbf
# 使用 Unity 2021.3 LTS 或更高版本打开项目
# 项目会自动配置相关依赖
```
## 📝 更新日志
详细的更新日志请查看 [CHANGELOG.md](./CHANGELOG.md)
### [v2.3] - 2026-03-08
**代码质量评分:9.5/10** ⭐
#### 🐛 Bug 修复
- ✅ **Asset.cs**: 修复并发异步加载引用计数泄漏(缓存命中失败路径未平衡 Retain/Release)
- ✅ **Asset.cs**: 修复同步加载命中"加载中"缓存时的引用计数泄漏
- ✅ **Asset.cs**: 修复 `LoadRawFile` 重复加载时旧句柄覆盖泄漏
- ✅ **WebSocketSystem.cs**: 修复 `OnError` + `OnClose` 双重触发 `StartReconnect()` 的问题
- ✅ **WebSocketSystem.cs**: 修复 `Disconnect()` 后 `_isDisposed` 重置时机错误导致意外重连
- ✅ **WebSocketSystem.cs**: 修复重连时旧 WebSocket 实例未安全清理
- ✅ **WebSocketSystem.cs**: `Send()` 返回类型从 `Task` 统一为 `UniTask`
- ✅ **SinglePoolData.cs**: `Dispose()` 添加 `Pool.Clear()` 兜底,防止资源引用泄漏
#### ⚡ 性能优化
- 🚀 **Asset.cs**: `ReleaseUnusedAssets` / `ReleaseIdleAssets` 改用复用 `List` 替代 LINQ ToList,消除 GC 分配
- 🚀 **Asset.cs**: 自动释放闲置资源改为固定间隔检查(5s),避免每帧 LINQ 遍历
#### 🧹 代码质量
- 📝 删除 `Retain()` 后的冗余 `UpdateUseTime()` 调用
- 📝 `OnError` 注释明确说明不在此处触发重连,逻辑收拢到 `OnClose`
- 📝 `Disconnect()` 文档注释说明 `_isDisposed` 不在此重置的原因
### [v2.2]
**代码质量评分:9.0/10** ⭐
#### 🏗️ 架构优化
- ✨ **统一访问入口**: 实现 GameMain 统一模块访问,所有模块通过 `GameMain.XXX` 访问
- 🎯 **快捷属性**: 添加常用模块的快捷访问属性(Resource, Tick, UI, Audio 等)
- 📐 **双层架构**: 明确 Runtime(框架层)与 HotUpdate(业务层)的职责边界
- 🔄 **API 统一**: HotUpdate 层代码全面迁移到统一访问方式
#### ⚡ 性能优化
- 🚀 **Tick 系统优化**: 从 List 改为 HashSet,注册/注销性能从 O(n) 提升到 O(1)
- ⏱️ **防重复注册**: HashSet 自动防止重复注册,提升系统稳定性
- 🎯 **批量移除优化**: 异常对象延迟批量移除,避免遍历时修改集合
#### 🧹 代码质量
- 📝 **完整 XML 注释**: 为核心类添加完整文档注释
- 🔢 **消除 Magic Number**: 提取所有魔法数字为有意义的常量
- 🗑️ **删除冗余代码**: 移除未使用代码,简化架构
### [v2.1]
- 🎯 **UI系统重构**: 实现职责分离架构
- ⚡ **并发优化**: UI 批量预加载改为并行处理
- 🔗 **链式API**: 新增 UIRequestBuilder
### [v0.0.1]
- ✨ 重构架构,引入依赖注入系统
- 🔧 修复代码质量问题和命名规范
- 📝 重写项目文档
## 📄 许可证
本项目采用 MIT 许可证 - 查看 [LICENSE.md](./LICENSE.md) 文件了解详情。
## 👥 社区与支持
- 🐛 **问题反馈**: [提交 Issue](https://gitee.com/Absure/hoppy-game_-dbf/issues)
- 💬 **QQ交流群**: [399346678](https://qm.qq.com/q/bswKDNjWJU)
- 📧 **邮箱**: dhaopi@163.com
## 🙏 致谢
感谢以下开源项目的支持:
- [HybridCLR](https://github.com/focus-creative-games/hybridclr) - 热更新解决方案
- [YooAsset](https://github.com/tuyoogame/YooAsset) - 资源管理系统
- [Luban](https://github.com/focus-creative-games/luban) - 数据表工具
- [UniTask](https://github.com/Cysharp/UniTask) - 高性能异步
- [NativeWebSocket](https://github.com/endel/NativeWebSocket) - WebSocket 客户端
- [SaveGameFree](https://github.com/BayatGames/SaveGameFree) - 存档系统
感谢所有为这个项目做出贡献的开发者!
---
Made with ❤️ by HoopyGame Studio