UE5 热更新方案

Posted 东东7_7

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了UE5 热更新方案相关的知识,希望对你有一定的参考价值。

更新流程

  1. 从服务器获取版本信息(检查更新)
  2. 此文件在每次发版本(包括整包和更新包)的时候生成
  3. Json文件格式
    1. baseVersion 打包的基本资源版本号,后续用于比较增量更新,递增
    2. latestPatchVersion 最新的版本号
    3. patchList 资源包列表
    4. url:这里使用压缩包格式,减少空间消耗和方便资源的管理

    "baseVersion": 23,
    "latestPatchVersion": 25,
    "patchList": [
        
            "from": 23,
            "to": 25,
            "size": 90532468,
            "md5": "ddfadecf655414732dd2f75e428d2b57",
            "url":  "http://127.0.0.1/patch_23-25.zip"
        ,
        
            "from": 24,
            "to": 25,
            "size": 40552678,
            "md5": "732dd2f75e428d2b57ddfadecf655414",
            "url":  "http://127.0.0.1/patch_24-25.zip"
        
    ]

  1. 对比版本信息和客户端信息
// 本地的Json文件示例

    "baseVersion": 23,
    "latestPatchVersion": 24

  1. 将本地的Json文件和最新的json文件baseVersion和latestPatchVersion的进行对比
    1. 若baseVersion和latestPatchVersion均和本地一致,则直接进入游戏
    2. 若本地baseVersion过小,则需要去应用商店获取最新客户端
    3. 若本地latestPatchVersion过小,则需要去下载当前版本from到最新版本to的资源文件
  2. 下载zip文件
  3. 若检查到网络非WiFi信号,则提示是否需要开启流量下载
  4. 若下载过程中网络中断,下载失败并提示用户是否需要重试(下载采用断点续传)
  5. 校验下载文件
  6. 对比软件包大小和md5值
  7. 若软件包大小和md5值相同,则进入解压加载流程
  8. 若不相同,提示用户出现异常,给出错误原因,询问是否重新尝试
  9. 解压并加载资源文件
  10. 解压资源文件
  11. 加载资源文件
  12. 更新版本号
  13. 更新完成,进入游戏

构建流程(命令行打包)

整包

  • start CALL C:\\UE5.0\\UnrealEngine\\Engine\\Build\\BatchFiles\\RunUAT.bat BuildCookRun -project=C:\\Work\\androidProject\\AndroidProject.uproject -noP4 -Platform=Android -createreleaseversion=1.0 -UTF8Output -bulid -clientconfig=Development -serverconfig=Development -cook -allmaps -CookFlavor=ASTC -Compressed -SkipCookingEditorContent -pak -skipstage -archive -archivedirectory=C:\\Work\\Release -package

  • C:\\UE5.0\\UnrealEngine\\Engine\\Build\\BatchFiles\\RunUAT.bat 为UE安装路径下脚本文件

  • C:\\Work\\AndroidProject\\AndroidProject.uproject 为工程路径下可执行程序

  • C:\\Work\\Release为整包生成路径

  • 其他参数不变,如需更改,可以参考命令行参数查询表
    https://blog.csdn.net/u010385624/article/details/89916184

版本确定

  • 在整包更新中一个重要的参数为createreleaseversion=1.0,他用来定义release版本,版本信息用于dlc补丁

  • 执行完成后会在C:\\Work\\Release\\Android_ASTC\\下生成apk文件,其就是需要的整包
    更新包

  • start CALL C:\\UE5.0\\UnrealEngine\\Engine\\Build\\BatchFiles\\RunUAT.bat BuildCookRun -project=C:\\Work\\AndroidProject\\AndroidProject.uproject -noP4 -Platform=Android -basedonreleaseversion=1.0 -generatepatch -UTF8Output -bulid -clientconfig=Development -serverconfig=Development -cook -allmaps -CookFlavor=ASTC -Compressed -SkipCookingEditorContent -pak -skipstage -archive -archivedirectory=C:\\Work\\Patch -package

  • 这里唯一不同为C:\\Work\\Patch为补丁包生成路径

版本确定

  • 在这里对应整包basedonreleaseversion=1.0 中的createreleaseversion=1.0,说明他是基于1.0版本的补丁包,-generatepatch 表示补丁为打补丁
  • 执行完成后在C:\\Work\\Pitch\\Android_ASTC\\AndroidUpdate\\Content\\Paks路径下生成pak文件,在后缀有_P的包为需要的补丁包,无.pak的文件为基础包的资源,在进行更新的时候,只需要将补丁包上传到服务器即可

在虚幻打包中他只会带入UE的资源文件,而我们要带入的是Json文件,所以需要在这里声明Json文件(基础包的版本文件)所在的路径

以上是关于UE5 热更新方案的主要内容,如果未能解决你的问题,请参考以下文章

lua热更新方案总结

UE5热更新(Pak包的Cook,打包,加载,踩过的一些坑)

Linux内核热补丁方案对比

Android 热修复方案Tinker 系列文章

Android 美团Robust热更新 使用入门

实现iOS图片等资源文件的热更新化: 一个最小化的补丁更新逻辑