Unity3D 热更新实战 3:资源创建及打包

ABSTRACT

接实战 2 的项目笔记。记录资源命名约定(文件夹 xxx 对应 xxxPanel.prefab)、Packager.cs 打包工具与自写的 AddBuildMapUtil 辅助编辑器、HotFixManager 的解包-更新-加载流程,以及「两次解包 + 进度条」的更新体验设计。

核心要点

  • 命名约定:一个面板及其资源放同一文件夹,文件夹名 xxx 则面板 prefab 必须命名 xxxPanel,PanelManager.CreatePanel 依赖此约定工作。
  • 打包以文件夹为单位,打包类为 Packager.cs;Lua 脚本由框架自动打包,开发者只需关心图片等资源;作者自写 AddBuildMapUtil 编辑器工具按目录快速打包。
  • HotFixManager 流程:DevelopMode 直接进 OnResourceInited;首跑 CheckExtractResource 解包;AppConst.UpdateMode=true 时才走更新下载;最终都进入 OnResourceInited 加载 Lua 逻辑。
  • 更新关键在 OnUpdateResource:先请求 version 文件确定版本路径,再请求 files.txt?v=当前时间(时间戳防 CDN/HTTP 缓存),与本地逐文件比 MD5,缺失或不同即下载。
  • 更新进度通过 NotiConst.UPDATE_MESSAGE 消息广播,AppView 注册后驱动进度 UI。
  • 两次解包策略:第一次只解 Lua 与主界面资源以便尽快进主界面,第二次带进度条解全量;因该项目大版本更新必须换包,最终简化为「热更界面在大版本更新前保持不变」。
  • 体验细节:更新进度的逻辑本身基本不变,即使主界面逻辑有更新,也可「用老的更新流程更完再说」——自举环节保持极简稳定。
  • 效率技巧:往 Unity 安装目录 ScriptTemplates 放模板文件,即可在编辑器里直接新建 Panel/Ctrl 的 Lua 文件。

关键实体与概念

Packager.cs、AddBuildMapUtil、HotFixManager、AssetBundle、files.txt、MD5、版本号比对、两次解包、NotiConst、ScriptTemplates

关联概念

来源回溯

  • 原始文件:raw/gamedev/unity3d热更新实战3-资源创建及打包.md(evernote/FW-游戏3研发技术 导入)

时效性评估

  • 仍有效:版本文件 + 清单 + 时间戳防缓存、两次解包缩短首启等待、自举更新器保持稳定等设计思想,在现代商业热更框架中仍常见。
  • 已过时:手写 Packager/HotFixManager 已被 Addressables / YooAsset 的构建管线与版本清单机制取代,无需再自维护 files.txt 与 MD5 比对。