Unreal Engine hot update manage and package plugin.
bCookPatcherAssets
在HotPatcher/Mods
下,可以基于HotPatcher二次开发新的打包和资源管理模式,充分利用HotPatcher的框架功能,能够拓展更多的功能:
等等,根据业务的实际需求实现真正的定制化。
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的核心功能,可以根据需求定制化界面、拓展新功能。
CUSTOM_ASSET_GUID
时的编译错误本次更新包含大量的内容,修正了一些问题和重构部分功能,提升了跨引擎版本的兼容性。
AssetManagerEx
模块,将UFLibAssetManagerHelper
函数库移入HotPatcherRuntime
RecursiveWidgetTree
失效bRecursiveWidgetTree
分析不到部分父级UMG的情况BoneCompressionSettings
设置,详见Cook时的依赖加载(注意:在编辑器中只有资源第一次加载或以Standalone模式执行时生效)。bRecursiveWidgetTree
的规则为:
资源依赖分析优化数据:
同时对Release的导出也有巨大提升,2w资源量:
NoCompileShader
,避免因为加载资源导致的Shader编译,加速导出。注意:在目前的版本中,获取uasset的HASH值是通过获取引擎内的
PackageGUID
,但是该属性即将在UE4.27和UE5中废弃,所以我添加了自定义的资源HASH计算支持,会计算原始的uasset文件的MD5值,用来替代即将废弃的PackageGUID
(目前插件中并未开启,等UE正式废弃时会替换),对插件功能并无影响,但使用PackageGUID
和通过计算MD5的Release*.json,不能通用,不然会造成全部的资源都具有差异。
想要现在就开启的话,可以在AssetManagerEx.build.cs
中将bCustomAssetGUID=true
即可。
HotPatcher v72更新: Github 上的提交:v72 & optimize impl & fix mac issues & multi cooker
最近在做一个大更新,后续可以使用 HotPatcher 替换 UE 的 Cook 和分包机制,实现多进程甚至多机器的 Cook 任务分配,在基础包流程就可以使用 HotPatcher 进行管理,并加速 UE 的打包过程。不仅是热更方案了,拓展为一个完整的资源管理方案。
Project Settings
-Crypto
的配置生成Crypto.json注意:UnrealPak通过
-encryptionini
指定使用项目Ini配置的代码有Bug,会导致Crash,我的实现中完全抛弃了Ini,统一使用Crypto.jon