Releases: hxhb/HotPatcher
v76.0
HotPatcher v76.0版本更新
- 支持World Composition
- 修复跨引擎版本的兼容性问题
- 默认开启
bCookPatcherAssets
- 优化代码、修复4.27中的编译问题
- 支持非侵入式给HotPatcher开发模块
在HotPatcher/Mods
下,可以基于HotPatcher二次开发新的打包和资源管理模式,充分利用HotPatcher的框架功能,能够拓展更多的功能:
- 资源分析
- 打包
- 资源扫描、管理、审计
- 多进程Cook
- 不同形式的热更新方式
等等,根据业务的实际需求实现真正的定制化。
模块扩展示例
uplugin中添加HotPatcher的插件依赖:
"Plugins": [
{
"Name": "HotPatcher",
"Enabled": true
}
]
在build.cs中添加模块依赖:
PublicDependencyModuleNames.AddRange(new string[]{
"HotPatcherRuntime",
"HotPatcherCore",
"HotPatcherEditor"
});
在模块的StartupModule
中即可注册到HotPatcher中:
THotPatcherTemplateHelper::AppendEnumeraters<EHotPatcherCookActionMode>(TArray<FString>{TEXT("ByMultiProcess")});
FHotPatcherAction MultiCookerAction
(
TEXT("Cooker"),
LOCTEXT("ByMultiProcess", "ByMultiProcess"),
LOCTEXT("MultiCookerActionHint", "Use multi-process Cook Content"),
FSlateIcon(),
nullptr,
CREATE_ACTION_WIDGET_LAMBDA(SMultiCookerPage,TEXT("ByMultiProcess"))
);
FHotPatcherActionManager::Get().RegisteHotPatcherAction(TEXT("Cooker"),TEXT("ByMultiProcess"),MultiCookerAction);
基于HotPatcher的核心功能,可以根据需求定制化界面、拓展新功能。
v75.2
v75.1
v75.0
本次更新包含大量的内容,修正了一些问题和重构部分功能,提升了跨引擎版本的兼容性。
- 重构了Cook流程,并支持了几种不同的Cook模式,加速Cook过程
- 统一编辑器Cook、Patch流程、MultiCooker使用的Cook流程
- 移除CookManager支持
- 支持Chunk内资源编译的shader打包,之前是整个Patch打包单个ShaderLib,并且支持给每个Chunk自定义ShaderLib路径、命名
- 支持排除资源类型
- 修复IsSkipAsset在ParallelFor Cooking过程中的Crash问题
- Cook前清理旧Cooked文件
- 添加了大量的Profiling Tag进行性能分析
- 在修改引擎模式下,可以控制每个Cooker进程拉起的ShaderCompileWorker数量,避免操作系统进行频繁进程切换开销
- 支持Patch版本号
- 创建HotPatcherCore模块,与HotPatcherEditor模块分离,Editor只有编辑器部分逻辑
- 修复序列化AssetRegistry的Crash问题
- 修复Sandbox路径转换问题
- 修复UE4Editor-cmd在非Development及32位模式下的问题
- 清理冗余代码、接口、优化流程
- 提升引擎兼容性,最低兼容至4.22(无ContentBrowser菜单相关功能)
v74
v74
- 重构依赖分析模块,性能提升一个数量级(测试2w资源量提升约70倍)
- 重构了从Paklist/Pak文件导入Release信息的模块
- 优化实现,清理了大量冗余接口,整理代码组织方式
- 移除
AssetManagerEx
模块,将UFLibAssetManagerHelper
函数库移入HotPatcherRuntime
- 修复4.25及之后的引擎版本中,由于引擎接口变动导致的
RecursiveWidgetTree
失效 - 修复当开启基础版本比对时,
bRecursiveWidgetTree
分析不到部分父级UMG的情况 - Patch支持PackageTracker,用来追踪不在依赖关系中但在ImportTable中的的资源,如动画序列的
BoneCompressionSettings
设置,详见Cook时的依赖加载(注意:在编辑器中只有资源第一次加载或以Standalone模式执行时生效)。
bRecursiveWidgetTree
的规则为:
- 若没有指定基础版本,则默认递归分析Patch中UMG资源的所有引用它的父级UMG控件
- 若指定基础版本,只会分析基础包中存在的父级UMG控件,避免带入非必要资源
资源依赖分析优化数据:
同时对Release的导出也有巨大提升,2w资源量:
- 旧版本导出release总耗时568.635s
- 新版本总耗时57.28s
v73
- 支持CUSTOM ASSET HASH计算
- 替换部分即将在UE4.27/UE5中废弃的API
- Release添加bBackupProjectConfig,支持备份基础包的Config目录
- 导出Release时支持
NoCompileShader
,避免因为加载资源导致的Shader编译,加速导出。 - 优化代码,替换部分FString to FName、资源依赖扫描优化
- 修复PackageTracker潜在的crash问题
- 右键CookAndPakAction支持选择是否分析资源依赖
注意:在目前的版本中,获取uasset的HASH值是通过获取引擎内的
PackageGUID
,但是该属性即将在UE4.27和UE5中废弃,所以我添加了自定义的资源HASH计算支持,会计算原始的uasset文件的MD5值,用来替代即将废弃的PackageGUID
(目前插件中并未开启,等UE正式废弃时会替换),对插件功能并无影响,但使用PackageGUID
和通过计算MD5的Release*.json,不能通用,不然会造成全部的资源都具有差异。
想要现在就开启的话,可以在AssetManagerEx.build.cs
中将bCustomAssetGUID=true
即可。
v72
HotPatcher v72更新:
Github 上的提交:v72 & optimize impl & fix mac issues & multi cooker
- 修复 Mac 的 SVersionUpdater 的 Crash 问题
- 修复 Mac Cook 时开启 share shader code 异常
- 修复在 Mac 上的编译错误
- 优化 Shader 收集流程,保证在 Cook 完毕之后才关闭 Shader 收集
- 废弃 bIncludeAssetRegistry/bIncludeGlobalShaderCache/bIncludeShaderBytecode 三个选项,有更好的替代实现,详见 UE 热更新:Shader 更新策略。
最近在做一个大更新,后续可以使用 HotPatcher 替换 UE 的 Cook 和分包机制,实现多进程甚至多机器的 Cook 任务分配,在基础包流程就可以使用 HotPatcher 进行管理,并加速 UE 的打包过程。不仅是热更方案了,拓展为一个完整的资源管理方案。
v70
- 支持打包GameFeature/插件,在UE4.27/UE5中默认开启,详见文章:UE5:Game Feature预研
- 重构Pak加密模块,支持从项目设置导入加密配置,并且与基础包加密方式对齐
- 支持从
Project Settings
-Crypto
的配置生成Crypto.json - 优化代码
注意:UnrealPak通过
-encryptionini
指定使用项目Ini配置的代码有Bug,会导致Crash,我的实现中完全抛弃了Ini,统一使用Crypto.jon