kyuskoj 发表于 2021-12-24 10:54

UE4 热更新经验总结与hotpatch插件分析

因为热更这种基本技术,在联网游戏里也是必修课。之前做unity时候做过这个,但是到了ue4也算是从零开始。想掌握UE4热更第一步肯定是看各种博客官方文档,我先把我看过的热更相关文章地址列出给大家参考参考,这些文章也是我筛选过的有可以学习的知识。

一、如果之前没怎么接触过热更的我建议先看官方文档,对整体有一个理解,我也是先跟着官方文档做了一遍热更流程

https://docs.unrealengine.com/zh-CN/Engine/Deployment/HowToCreatePatch/index.html

二、各个博主写的相关文章,有的写的比较早但是技术思想都是一致的

UE4 Pak 相关知识总结

UE4补丁与DLC | 风蚀之月

UnrealPak的使用笔记 | 风蚀之月

三、这篇文章我想单独说一下就是,他讲的还是很清晰的也给了工具代码,但是他也有两个问题

(1)没有解决这个资源依赖的问题

(2)我本人更倾向把这种生成pak的工具做成ue的工具,这样对我们学习ue4引擎更有利

UE4资源热更新_MichaelLiew的博客----VR行者-CSDN博客

四、接下来我就给大家介绍介绍我最近学习了这个hotpatch插件的经验,因为这个插件本身就是开源的大家有兴趣也可以自己了解了解,因为插件本身有很详细的操作说明我这里也不介绍插件的操作

插件开源地址:https://github.com/hxhb/HotPatcher

1.看完上面文章大家应该对热更都有基本知识面了,都知道其实打包的pak文件实质上是项目内cook后的资源已经相关的引擎资源还有一些ue4本身不支持的资源,我们有些也要额外打包成pak的。ue4本身不支持的资源像lua等文本文件并不是每个项目都有的,这个看各自的项目需求。

2.hotpatch插件生成补丁的原理就是先生成一个基础版本的_Release.json文件,这个文件里记载着基础版本所有你需要热更的资源并且包括各个的依赖资源格式如图,大家可以自己生成看下。因为他把依赖资源也放到一起了,所以也解决了上面第3点那个博主资源依赖的问题



                                                                            产生基础版本_Release.json



                                                                                     _Release.json基本格式



                                                                                     补丁界面格式



                                                 产生的补丁pak和补丁文件细节《平台名字》+_PakCommands.txt

3.因为你有了基础版本的资源信息,其实后面拆分就很简单了,我先给大家说一下思路。hotpath在生成补丁是会先拿到基础版本的_Release.json,再拿到项目最新的资源信息产生和基础版本的_Release.json一样格式的数据,对比产生差分数据,将差分数据写进《平台名字》+_PakCommands.txt。然后通过生成pak命令解析《平台名字》+_PakCommands.txt拿到有变化的文件全名,进行差分pak文件创建。基本思想很简单就是这样,产生的差分pak在项目运行时我们手动Mount(挂载)就完成了补丁的全过程。

4.基本流程简述完成后我把hotpatch源码的关键点给大家描述一下
(1)导出基础版本_Release.json



(2)生成差分pak,这里面步骤稍微多一点

第一步是获得基础版本文件信息和获得当前版本文件信息(这里文件指的是需要热更的文件),然后对比两个版本产生差分文件信息(我重点补充一下他这个文件信息获取时候是会分析依赖资源)



                                                                                     分析依赖资源函数接口



(3)前面两步已经把文件差分信息拿到了,后面就是怎么用这个差分信息。会把所有有变化的文件写入《平台名字》+_PakCommands.txt





(4)最后一步生成补丁pak,这里需要先执行补丁命令,这个命令带的参数可以用默认提供的,里面最终的参数就是步骤3刚才生成的《平台名字》+_PakCommands.txt,这样ExecuteUnrealPak(*CommandLine);命令执行时候会去加载《平台名字》+_PakCommands.txt,通过这个txt拿到有变化的文件信息,打进补丁pak。

                                                                                     执行补丁pak命令



                                                                        加载《平台名字》+_PakCommands.txt



                                                                                     生成补丁pak



这样补丁pak就生成完了,这个插件在进行文件分析时候写的很全,有兴趣的大家也跟进源码学习一下。分析文件源代码我就不再截图了。

最后一步就是补丁挂载,因为我只是进行补丁测试,所以省略了补丁下载的过程,我的补丁是手动copy的,补丁下载有兴趣可以自己写一下,下载是逻辑功能问题不大。



                                                                                     测试Mount挂载代码


                                                                                     基础版本截图



                                                 补丁后版本截图,明显多了一个Actor,并且改变了一个Actor颜色
页: [1]
查看完整版本: UE4 热更新经验总结与hotpatch插件分析