TEngine 阅读笔记
阅读对象:Alex-Rachel/TEngine main 分支。
阅读时间:2026-06-28。
说明:本笔记基于 GitHub README、Books/文档目录、关键目录树和核心源码页面阅读;未本地克隆完整仓库,未使用 Unity 打开项目,未构建或运行。
1. 一句话结论
TEngine 是一套面向商业 Unity 项目的客户端开发框架:它把热更新、资源管理、配置表、UI、事件、流程、对象池、FSM、音频、本地化和调试能力预先拼成一套可直接落地的项目底座。
它的重点不是提供单个轻量库,而是提供一套“Unity 项目工程化模板”:主包启动、HybridCLR 热更、YooAsset 资源生命周期、Luban 配置生成、业务热更入口和编辑器工具链一起交付。
2. 它想解决什么问题
Unity 商业项目常见的重复工程问题包括:
- 热更新链路难统一。
- 资源加载和释放容易散落在业务层。
- 配置表生成、协议和客户端代码容易各自为政。
- UI 生命周期、事件解绑、对象池、流程状态机需要每个项目重做。
- 新团队成员很难快速理解启动流程和资源约定。
TEngine 的做法是把这些问题收敛到固定目录、固定模块和固定启动流程中。业务代码可以按框架约定写在 GameScripts/HotFix,框架能力集中在 Assets/TEngine,配置和工具链放在仓库根部的 Configs、Tools、BuildCLI。
3. 项目结构
仓库根目录的分层比较清楚:
text
Books/ 文档和模块说明
BuildCLI/ 构建相关入口
Configs/GameConfig/ Luban 配置表定义、数据、生成脚本
Tools/ FileServer、Luban、事件代码生成器等工具
UnityProject/ Unity 工程主体Unity 工程内的重点目录:
text
UnityProject/Assets/
AssetArt/ 美术资源
AssetRaw/ 热更资源
Editor/ 项目编辑器脚本
GameScripts/ 游戏侧代码
Launcher/ 启动场景相关资源
Plugins/ 第三方插件
Scenes/ 场景
TEngine/ 框架核心Assets/TEngine 又分成:
text
TEngine/
Editor/ 框架编辑器工具
Extension/ 框架扩展
Libraries/ 依赖库
Runtime/ 运行时代码
Settings/ 框架配置资产运行时核心在 Runtime:
text
Runtime/
Core/ ModuleSystem、异常、日志、工具类等基础设施
Extension/ Json、Material、Tween 等扩展
Module/ Audio、Resource、Procedure、UI、FSM 等模块4. 启动路径
主程序入口是 UnityProject/Assets/GameScripts/GameEntry.cs。
GameEntry.Awake() 里做了几件关键事:
- 通过
ModuleSystem.GetModule<T>()初始化IUpdateDriver、IResourceModule、IDebuggerModule、IFsmModule。 - 调用
Settings.ProcedureSetting.StartProcedure().Forget()启动流程系统。 DontDestroyOnLoad(this)保持入口对象跨场景存在。
README 中给出的商业化流程是:
text
ProcedureLaunch
-> ProcedureSplash
-> ProcedureInitPackage
-> ProcedurePreload
-> ProcedureInitResources
-> ProcedureUpdateVersion
-> ProcedureUpdateManifest
-> ProcedureCreateDownloader
-> ProcedureDownloadFile
-> ProcedureDownloadOver
-> ProcedureClearCache
-> ProcedureLoadAssembly
-> ProcedureStartGame这说明 TEngine 把启动流程设计成显式状态链。资源包初始化、版本检查、Manifest 更新、下载、清缓存、加载热更程序集、进入游戏逻辑都被拆成独立 Procedure。
5. 模块系统
核心模块管理在 UnityProject/Assets/TEngine/Runtime/Core/ModuleSystem.cs。
它的核心设计很直接:
- 所有模块继承
Module。 - 外部按接口取模块,例如
GetModule<IResourceModule>()。 - 默认按命名约定从接口名推导实现类:
IResourceModule对应ResourceModule。 - 模块用
Activator.CreateInstance延迟创建。 - 模块按
Priority插入链表。 - 实现
IUpdateModule的模块会进入更新列表。 Shutdown()按反向顺序关闭模块,并清理内存池和 Marshal 缓存。
这个设计的优点是模块接入成本低,调用侧只依赖接口。代价是实现类命名和程序集位置需要遵守约定,否则运行时才会暴露错误。
6. 热更分层
业务热更代码在 UnityProject/Assets/GameScripts/HotFix。
当前结构里主要有:
text
HotFix/
GameLogic/
IEvent/
Module/
SingletonSystem/
UI/
GameApp.cs
GameModule.cs
GameProto/GameApp.cs 是热更域入口。Entrance(object[] objects) 会:
- 初始化
GameEventHelper。 - 接收主工程传入的热更程序集列表。
- 注册 Unity 销毁监听,在销毁时释放
SingletonSystem。 - 启动业务逻辑,目前示例中展示
BattleMainUI。
文件里还有 ENABLE_OBFUZ 条件编译,说明热更入口会配合 Obfuz 做混淆兼容处理,避免入口类名或方法名被破坏。
7. 核心模块画像
从 README 和目录看,TEngine 的核心模块主要包括:
ResourceModule:基于 YooAsset,覆盖编辑器模拟、离线和远端模式,提供资源引用、资源组、LRU/ARC 缓存策略和同步/异步加载。GameEvent:事件系统,强调低 GC,支持 string/int 事件 ID,UI 生命周期可自动清理绑定。UIModule:纯 C# UI 管理,脱离 Mono 生命周期,支持UIWindow/UIWidget分层和代码生成。ConfigSystem:集成 Luban,支持懒加载、异步加载、同步加载和本地化。ProcedureModule:承载启动、更新、下载、加载程序集、进入游戏的流程状态机。ObjectPoolModule/MemoryPool:把对象复用和内存管理框架化。FsmModule、TimerModule、AudioModule、LocalizationModule、SceneModule:补齐常见游戏客户端基础能力。
整体上,它更像一个“完整客户端脚手架”,不是只关注某一层的库。
8. 工具链
Tools/ 目录包含:
text
FileServer/
GameEventSourceGenerator/
Luban/
build-luban.bat
build-luban.shConfigs/GameConfig/ 包含:
text
CustomTemplate/
Datas/
Defines/
gen_code_bin_to_project.*
gen_code_bin_to_project_lazyload.*
gen_code_bin_to_server.*
luban.conf这条线说明配置表不是运行时附属功能,而是项目工程流程的一部分:表结构、数据、模板、客户端代码、二进制数据和服务端导出都放在仓库里统一管理。
9. AI 工作流
README 明确提到 TEngine 内置面向 Claude Code 的 AI 开发工作流,核心是:
- 用
tengine-devskill 查询模块规范。 - 按任务等级决定查单主题、多主题还是直接改。
- 用会话缓存避免重复读规范。
- 当规范和源码冲突时,以源码为准并记录冲突。
这部分比较特别:它不是单纯写一份 AGENTS.md,而是把 AI 使用方式作为框架文档和开发流程的一部分。对大型 Unity 项目来说,这能降低 agent 误读框架约定的概率。
10. 适合的场景
TEngine 更适合:
- 需要热更新、远端资源和配置表体系的商业 Unity 项目。
- 希望直接沿用一套完整工程结构的小团队。
- 需要快速搭起客户端底座,而不是从零拼 HybridCLR、YooAsset、Luban、UI、事件、流程系统。
- 愿意接受框架约定,并围绕这些约定写业务代码的团队。
不太适合:
- 只想要一个轻量工具库的项目。
- 已经有成熟工程体系,只需要局部替换资源或 UI 模块的项目。
- 不想引入 HybridCLR、YooAsset、Luban 等完整链路的简单 Demo。
11. 阅读后的判断
TEngine 的价值在“集成度”和“项目模板化”,不是某个单点算法特别复杂。它把 Unity 商业项目里最容易反复踩坑的启动、热更、资源、配置、UI 和事件管理都放进固定流程。
代码层面最值得先读三条线:
GameEntry到Procedure*:理解主工程如何启动和进入热更。ModuleSystem到各Runtime/Module/*:理解框架服务如何注册、更新和关闭。HotFix/GameLogic/GameApp到 UI/事件/业务模块:理解热更域如何接管业务。
如果后续要实际接入,优先验证 Unity 版本、第三方插件、HybridCLR 生成步骤、YooAsset 包构建、Luban 表生成和目标平台热更流程。只读源码还不足以判断这些链路在本地环境是否可以一次跑通。
12. 参考入口
- 仓库首页:https://github.com/Alex-Rachel/TEngine
- 文档目录:https://github.com/Alex-Rachel/TEngine/tree/main/Books
- Unity 工程:https://github.com/Alex-Rachel/TEngine/tree/main/UnityProject
- 框架核心:https://github.com/Alex-Rachel/TEngine/tree/main/UnityProject/Assets/TEngine
- 模块系统:https://github.com/Alex-Rachel/TEngine/blob/main/UnityProject/Assets/TEngine/Runtime/Core/ModuleSystem.cs
- 主程序入口:https://github.com/Alex-Rachel/TEngine/blob/main/UnityProject/Assets/GameScripts/GameEntry.cs
- 热更入口:https://github.com/Alex-Rachel/TEngine/blob/main/UnityProject/Assets/GameScripts/HotFix/GameLogic/GameApp.cs