7.9 KiB
7.9 KiB
TH1 Unity 项目完整代码分析报告
1. 总体框架设计与架构概览
TH1项目是一个基于Unity的高度模块化架构项目,采用数据驱动的架构设计,强调数据、逻辑和展示层的严格分离。项目整体建立在ET(Entity-Task)框架之上,这是一个常见的Unity客户端-服务器解决方案。
项目核心特征包括:
- 数据导向设计:整个游戏状态封装在可序列化的数据类中,便于保存/加载和网络同步
- 模块化架构:各个功能模块职责明确,相互独立
- 事件驱动:使用事件总线进行模块间解耦通信
- 热更新支持:通过Hotfix模块支持运行时代码更新
1.1 核心入口点
- Main.cs:应用的核心MonoBehaviour,负责初始化和管理所有主要系统的生命周期
- 通常作为单例模式实现,提供全局访问点
2. 使用的架构模式
2.1 数据导向设计 (Data-Oriented Design)
- 数据层:主要位于TH1_Data模块(如
MapData,PlayerData,UnitData) - 行为层:主要位于TH1_Logic模块(如
UnitLogic,CityLogic) - 严格分离游戏状态("什么")和行为逻辑("如何")
2.2 单例/管理器模式
AudioManager:音频管理PresentationManager:演示管理UIManager:UI管理FragmentManager:动画片段管理
2.3 服务定位器模式
- Table.cs:位于
TH1_Instance,作为服务定位器 - 加载并提供对所有
ScriptableObject游戏数据资产的集中访问
2.4 事件总线 (发布-订阅模式)
- EventManager.cs:提供静态类型安全的事件系统
- 允许不同模块无需直接耦合即可通信
- 对维护模块化至关重要
2.5 工厂模式
FragmentFactory:创建动画对象UnitAtomAnimFactory:创建单位原子动画FragmentDataFactory:创建数据容器
2.6 状态机模式
- FragmentManager和UnitAnimManager:处理动画状态(
Prepare,Playing,Finished) - PresentationManager:执行任务队列,确保复杂序列的正确执行顺序
3. 模块详细分析
3.1 TH1_Core - 核心框架
关键文件:
EventManager.cs:全局事件系统PresentationManager.cs:任务队列管理器
功能分析:
- 提供基础系统服务
EventManager处理全局事件机制PresentationManager管理高级任务队列(ISequencerTask),控制游戏流程、 cinematic序列
3.2 TH1_Data - 数据模型层
关键文件:
MapData.cs:游戏世界数据容器PlayerData.cs:玩家数据UnitData.cs:单位数据
功能分析:
- 包含游戏状态的所有运行时数据
MapData是整个游戏世界的顶层容器,包括网格、玩家、城市和单位- 使用
[MemoryPackable]进行序列化设计
3.3 TH1_Instance - 全局单例
关键文件:
Table.cs:全局数据访问点Timer.cs:全局计时器
功能分析:
Table.cs作为关键的单例,扮演数据库角色- 加载并提供对所有
TH1_DataAssetsScript配置数据的访问 Timer.cs提供延迟操作的简单全局工具
3.4 TH1_Logic - 游戏逻辑
关键文件:
UnitLogic.cs:单位逻辑CityLogic.cs:城市逻辑PlayerLogic.cs:玩家逻辑
功能分析:
- 包含游戏的"大脑"部分
- 持有操作和修改
TH1_Data数据的方法和算法 - 例如:单位移动、战斗计算、技能执行逻辑
3.5 TH1_Renderer - 渲染系统
关键文件:
MapRenderer.cs:主渲染控制器UnitRenderer.cs:单位渲染器GridRenderer.cs:网格渲染器
功能分析:
- 负责游戏状态的视觉表现
- 从
TH1_Data读取数据但不修改 MapRenderer.cs是主控制器,创建和管理UnitRenderer和GridRenderer实例
3.6 TH1_Anim - 动画系统
关键文件:
FragmentManager.cs:动画片段管理器UnitAnimManager.cs:单位动画管理器
功能分析:
- 复杂的两层动画引擎
FragmentManager管理"Fragments"队列(如完整的攻击序列)- 每个片段由"UnitAtomAnims"组成(如前进、播放攻击效果、后退)
3.7 TH1_UI - 用户界面
关键文件:
UIManager.cs:UI管理中心BottomBarUI.cs:底部栏UITechTreeUI.cs:科技树UI
功能分析:
- 管理所有UI元素
UIManager.cs是中央单例,控制各种UI面板的生命周期和可见性- 通常通过
EventManager响应游戏状态变化
3.8 TH1_Audio - 音频系统
关键文件:
AudioManager.cs:音频管理器
功能分析:
- 播放声音和音乐的单例管理器
- 包含音频播放器管理、音量处理、淡入淡出效果功能
3.9 TH1_Resource - 资源管理
关键文件:
SpriteCache.cs:精灵缓存MatCache.cs:材质缓存
功能分析:
- 包含缓存系统以高效管理频繁使用的资源
- 防止重复从磁盘加载精灵和材质
3.10 TH1_DataAssetsScript - 游戏配置
关键文件:
UnitTypeDataAssets.cs:单位类型数据TechDataAssets.cs:科技数据AnimDataAssets.cs:动画数据
功能分析:
- 使用
ScriptableObject资产定义游戏配置 - 允许设计者在Unity编辑器中直接调整游戏平衡和数值
4. 关键关系和依赖
4.1 层次结构
Main.cs (顶层)
├── 初始化所有其他系统
├── 在Update循环中驱动其他系统
│
Logic (TH1_Logic)
├── 直接修改 TH1_Data 中的数据
├── 通过 EventManager 或数据标志发送信号
│
Renderer & UI (观察者)
├── 从 TH1_Data 读取数据更新屏幕
├── 监听 EventManager 的事件
├── UI 捕获玩家输入并发送到 Logic
│
PresentationManager
├── 通过队列任务编排复杂序列
├── 使用 FragmentManager 播放动画序列
│
所有模块 → Table 单例 (TH1_Instance)
└── 获取游戏配置数据
4.2 数据流向
多数交互采用单向数据流: 输入(UI) → 逻辑 → 数据 → 展示(Renderer/UI)
这种架构使系统具有可预测性和易调试性。
4.3 ET框架集成
- Core:包含网络等底层功能
- Model:定义客户端和服务器共享的数据结构
- Hotfix:支持运行时代码更新的核心模块
5. 技术特点总结
5.1 架构优势
- 模块化:清晰的职责分离,便于维护和扩展
- 可测试性:数据与逻辑分离,便于单元测试
- 可扩展性:插件化架构支持功能扩展
- 性能优化:资源缓存和对象池机制
5.2 设计模式应用
- MVP模式:Model-View-Presenter在UI层应用
- 观察者模式:事件系统实现
- 策略模式:不同行为的可插拔实现
- 命令模式:任务队列系统
5.3 技术栈特征
- Unity引擎作为基础开发平台
- ET框架提供网络和热更新支持
- MemoryPack用于序列化
- ScriptableObject用于配置数据管理
6. 项目规模评估
6.1 代码量分布
- TH1_UI: ~358KB(最大模块,包含复杂UI逻辑)
- TH1_Renderer: ~227KB(渲染系统)
- TH1_Data: ~200KB(数据模型)
- TH1_Logic: ~130KB(游戏逻辑,包含多个子模块)
6.2 复杂度分析
- 高复杂度模块:UI系统和渲染系统
- 中复杂度模块:逻辑系统和动画系统
- 低复杂度模块:音频和资源管理
7. 维护建议
7.1 代码组织
- 当前模块划分合理,建议继续保持
- 可考虑进一步细分TH1_Logic中的大型子模块
7.2 性能优化
- 缓存机制已经实现,建议监控缓存命中率
- 可考虑对频繁更新的UI组件进行优化
7.3 扩展性考虑
- 事件系统为未来功能扩展提供了良好基础
- 数据驱动架构支持内容驱动的开发方式
报告生成时间: 2025-10-12 分析范围: TH1\Unity\Assets\Scripts 目录下所有TH1_*模块 分析工具: Claude Code静态代码分析