智能热更新插件v2
文档 下载 评论(41)

目录

简介
目前支持的功能
1.界面认识
____1.1 加载SimpleHotUpdate插件
____1.2 OSS服务器配置
____1.3 热更新的服务器文件路径
____1.4 客户端热更后的安装补丁设置
____1.5 主版本和额外版本
____1.6 版本号
____1,7 关于打包的设置描述
____1.8 RSA加密
____1-9 菜单配置表按钮介绍
____1-10 HTTP服务器界面认识
____1-11 配置HTTP服务器的服务器
____1-12 HTTP服务器脚本
2 上传补丁和加载补丁方法。
____2.1 补丁上传
____2.2 客户端安装策略
____2.3 生成一个StaticMesh
____2.4 生成Actor对象
____2.5 pak卸载
____2.6 pak后的地图正确的打开方式(Map)
3 主版本和额外资源
____3.1 加载新打包好的主版本
____3.2额外版本
4.热更新C++代码方法
5 关于材质丢失和iostore问题
____5.1 无法读取Pak的处理方法
____5.2 丢失材质的处理方法


简介

SimpleHotUpdate热更新插件目前拥有了阿里云OSS服务器和自定义HTTP服务器。

可以根据用户需求来回切换。

SimpleHotUpdate 热更新界面配置

目前支持UE4和UE5

注意:保证自己的引擎内部含有UnrealPak.exe(该插件打包是依赖各个版本的UnrealPak.exe)

注意:如果使用UE4版本打开,请将下面的模块注掉

目前支持的功能有:

1.支持一键补丁上传,主版本上传,额外信息上传

2.自动服务器镜像部署

3.客户端自动下载

4.可以定制自动安装或者手动安装,也支持各类脚本下载比如lua,

SimpleHotUpdate是解决原来的SimpleHotUpdateSystem插件的多插件耦合和无法在Ue4.26以上更高版本使用的bug,而重构的新插件

1.界面认识

界面认识是我们学习任何软件的基础入门,了解软件提供的功能也是为了方便更便捷的使用。

1.1 加载SimpleHotUpdate插件

先保证已经加载了智能热更新插件 SimpleHotUpdateEditor

1.2 OSS服务器配置

我们现在以阿里云OSS服务器配置为例

先配置阿里云OSS账户

AccessKeyID:OSS访问者的ID;

AccessKeySecret:OSS访问者的密钥;

EndPoint:描述当前OSS的EndPoint;

BucketName:创建的OSS桶的名字,也是我们热更新位置

1.3 热更新的服务器文件路径

热更新的服务器文件路径,和旧版本保持一致的风格,当然也可以自定义这些内容。

PatchVersionLogName:版本log的打印位置

ServerVersionName:服务器版本的位置

VersionLock:版本锁的位置

1.4 客户端热更后的安装补丁设置

PakSettings,该内容和打包以及未来的pak加载有关系

InstallContentPak:是否自动安装到未来打包好的项目下Content/Paks里面,如果为true,代表同意未来客户端下载后pak补丁将自动部署到里面Content/Paks。部署在里面的好处是随着引擎启动,可以支持自动加载pak,无需手动安装。

RelativeInstallationLocation:如果InstallContentPak为false,需要指定一个相对路径,这个路径是相对项目的,比如 /Hello/HelloPak/ 未来客户端下载将会在自己的项目根目录自动生成一个 项目根目录/Hello/HelloPak/ 文件路径,所有的补丁将会自动下载到里面,放在这里面的pak是不会自动部署到游戏中,需要用户自己安装。如果elativeInstallationLocation是空的,那么会默认安装到Content/Paks里面。

1.5 主版本和额外版本

这里和主版本以及额外路径配置有关

MainVersionInstallationInfo:这里记录主版本信息

FilePath:指定主版本的Pak

CustomExtraInstallationInfo:可以自定义加载

FilePath:指定自定义的文件,比如Lua或者Mp3等

InstallContentPak:是否支持自动加载到Content/Paks下,和上面的补丁类似

RelativeInstallationLocation:如果支持请指定一个路径,否则还是会自动安装到Content/Pak下

1.6 版本号

VersionName:版本名称。比如a.b.c;其中a是主版本号,b是Minor,c是补丁号

VersionMaximumBase:最大版本限制.

1,7 关于打包的设置描述

PakServerPaths:打包好的Pak应该存储在哪个文件里面。

PakLogPaths:Paklog的存储位置

PakPlatform:需要打包的平台是windows还是mac还是ios还是安卓

Cooked:该资源是Cooked后的资源吗,Runtime只能加载Cooked后的资源,编辑器可以加载未Cooked的资源,默认是Cooked

ReferenceAsset:是否支持资源引用打包。比如我们打包单个资源,但是不清楚这个资源是否有依赖其他资源,那么这个方法可以解决这个问题。

Compress:是否支持压缩。

ForceUTF8:对资源可以强制UTF8编码方式。

Order:pak资源优先级是否参考项目本身默认的优先级加载。

AES:对资源pak进行AES加密。

SecretKey:密钥。

1.8 RSA加密

如果希望支持RSA加密可以采用项目下的这种默认方式。

1-9 菜单配置表按钮介绍

HTTPServer和OSSServer:这两者是可以来回切换

SaveAsDefault:可以将配置的属性存储到默认的 your项目/Config/里面

PushToServer:该功能需要结合CustomPakSettings使用,至少配置一个有效的自定义主版本和自定义额外数据,PushToServer是直接上传配置好的资源到服务器,该信息会自动写入到版本列表中。

1-10 HTTP服务器界面认识

Account:管理员账户。

Password:管理员密码。

IP:链接的IP地址。

ObjectStorageName:将热更新数据如何自动部署到自定义服务器上。

1-11 配置HTTP服务器的服务器

这里可以采用阿帕奇服务器部署。

1-12 HTTP服务器脚本

配置HTTP服务器的脚本,该路径在 你的域名或者IP/Script/ServerScript.php

该脚本可以由用户扩展里面的协议,实现客户端HTTP和服务器HTTP的交互

脚本的路径
服务器PHP脚本

以下是脚本内容。通过客户端传递的协议来控制阿帕奇服务器版本的校验和文件生成等。

该代码可以直接复制粘贴到您的HTTP服务器ServerScript.php下。

<?php

function CreateDirAndCheck($dir)
{
    if(!is_dir($dir))
    {
        mkdir($dir,0700,true);
    }
    else
    {
        echo $dir."已经存在~~~~\n";
    }
}

$Protocol = $_GET["Protocol"];

//HSP_INIT,//初始化服务器的数据
if($Protocol == 0)
{    
    $Bucket = $_GET["Bucket"];
    $PatchVersionLogName = $_GET["PatchVersionLogName"];
    $ServerVersionName = $_GET["ServerVersionName"];
    $VersionLock = $_GET["VersionLock"];
    $Platform = $_GET["Platform"];

    $PatchVersionLogName = "../".$Bucket."/".$Platform."/".$PatchVersionLogName;
    $ServerVersionName = "../".$Bucket."/".$Platform."/".$ServerVersionName;
    $VersionLock = "../".$Bucket."/".$Platform."/".$VersionLock;
    $Patch = "../".$Bucket."/".$Platform."/Version/Patch";

    CreateDirAndCheck($PatchVersionLogName);
    CreateDirAndCheck($ServerVersionName);
    CreateDirAndCheck($VersionLock);
    CreateDirAndCheck($Patch);
}
//HSP_CHECK_LOCK,//检测锁
else if($Protocol == 1)
{
    $VersionLockPath = "../".$_GET["VersionLockPath"];
    if(!file_exists($VersionLockPath))
    {
        file_put_contents($VersionLockPath,"false");
        echo "false";
    }
    else
    {
        echo file_get_contents($VersionLockPath);
    }
}
//	HSP_LOCK,//上锁
else if($Protocol == 2)
{
    $VersionLockPath = "../".$_GET["VersionLockPath"];
    if(!file_exists($VersionLockPath))
    {
        file_put_contents($VersionLockPath,"true");  
    }

    file_put_contents($VersionLockPath,"true");
    echo "false";
}
//	HSP_UNLOCK,//解锁
else if($Protocol == 3)
{
   $VersionLockPath = "../".$_GET["VersionLockPath"];
    if(!file_exists($VersionLockPath))
    {
        file_put_contents($VersionLockPath,"false");  
    }
    
    file_put_contents($VersionLockPath,"false");
    echo "false";
}

2 上传补丁和加载补丁方法。

补丁是我们经常热更新的内容之一,这里会展示如何使用补丁更新技术。

2.1 补丁上传

补丁的快捷上传方案,本次操作会阻塞编辑器,并不是卡死。

2.2 客户端安装策略

如果这里选择的是手动安装pak,并且指定了相对路径,那么就需要手动安装。

客户端加载pak的参考图如下

MountPak:

PakFilename:需要指定一个pak路径。

PakOrder:加载pak的优先级。

MountPath:安装的路径,没有什么特殊需求,一般为空就行。

2.3 生成一个StaticMesh

如何生成StaticMesh,可以调用GetStaticMeshFromPak

需要指定一个相对的UE5路径比如上面的/Game/Box/xxx,它的原资源在UE5中是这样的:

2.4 生成Actor对象

如何生成一个Actor对象,可以使用GetActorFromPak,需要指定位置和旋转

GetActorformPak

2.5 pak卸载

如果希望卸载 ,可以调用UnmountPak

UnmountPak

PakFiename:需要指定一个Pak路径。

2.6 pak后的地图正确的打开方式

如果您是通过Pak已经将资源进行打包,那么地图的打开方式是不一样的。

我们原先是通过Open 地图名称 这种方式打开地图,但是对于地图pak这种方式是不行的。

可以参考下面正确的案例:

该资源在项目中的位置:


3 主版本和额外资源

主版本更新是我们经常使用的热更新技巧,那么如何做到这点呢?

3.1 加载新打包好的主版本

比如我们对场景做了改动:

然后通过该方法进行打包

对打包好的工程,我们需要重现指定以下打包好的pak文件

最后点击上传

这样客户端下次打开游戏的时候会接受到版本不一致的信息,会自动更新主版本。

注意:凡是定义为主版本的内容,客户端会自动安装到Content/Paks/下来替换原来的pak

3.2额外版本

额外的内容可以定制lua或者php等脚本的路径,也可以实现各类文件路径定制

比如我们配置如下信息

加载一张jpg图片

我们可以在这里定制客户端下载后安装jpg的路径,如果没有相对路径,或者InstallContentPak为true,那么就默认安装到Content/paks/下.除了UE5 pak等类型会被加载到游戏,其他格式暂时不支持.

如果您设定了相对路径,那么需要用户自己实现客户端代码来读取热更下来的额外文件加载方式。

额外路径配置策略

4.热更新C++代码方法

除了我们可以热更新资源,通样也可以热更新C++。

如果您改动了您代码,UE5默认会把代码打包到游戏的Exe或者Dll里面,那么您只需要默认更新exe或者dll到客户端。

如果热更新C++,那么请使用自定义额外路径的方式CustomExtraInstallationInfo来指定安装策略,比如:

已经打包好的主版本项目
配置需要上传的资源

5 关于材质丢失和iostore问题

UE5默认开启了IoStore,如果您的pak无法加载,就把它关掉吧。

5.1 无法读取Pak的处理方法

不要启用Io Store,它会把包打散,后面每次指定打包很麻烦。

UE5默认开启了IoStore,如果您的pak无法加载,就把它关掉吧。

5.2 丢失材质的处理方法

关闭共享材质,如果希望使用共享材质,可以勾选它,但是需要自己加载共享材质。

建议直接勾掉,材质直接打到包里面,否则不指定共享材质就容易丢失材质。

 

6.打包的动画资源无法加载的bug

导致这个原因是因为动画资源没有打包到项目里面,这个以后插件也会做关联引擎打包资源的设置,目前的解决方案是暂时在自己的基础版本里面打包一个动画资源,比如小白人,这样就可以解决这个问题了。

 


更新日志

2021.11.6 1.解决热更新C++代码的bug;2.解决安装程序字体糊状bug;3.解决自定义路径pak下载无法安装的bug;

2021.11.7 1.添加pak打包到本地;2.为HTTP选项增加公网IP设置和内网IP设置,内网上传,公网下载。

2021.11.9 1.暴露接口程序到用户支持实时名称显示,总字节数量显示,接送字节显示;2.版本热更检测的状态暴露到用户层;3.上传服务器版本的日志状态显示。

2021.11.23.1.增加本地版本导出功能2.HTTP服务器脚本的文本锁路径修改 。

2021.11.30.1.解决LoaclVersion版本无法用HTTP下载的bug.

2021.11.30.1.解决UE4打包1kb问题。

2021.12.9.1.1.增加了获取本地版本,2.增加了直接上传版本信息,3.增加了可以自定义丢弃包的操作,方便主版本更新和合并版本使用

2021.12.12.1.增加了材质读取API,2.增加 贴图api读取,3.支持非原工程打的pak可以在其他工程里面读取的方案。

2021.12.14.1.修复OSS独立程序上传成功确显示错误的日志。

2021.12.15. 支持UE4.25

2021.12.20. 解决热更新插件在编译中的报错-循环引用问题

2022.1.3. 解决版本计数bug,显示打包名字错误问题

2022.1.12. 解决本地模式版本的主版本无法上传bug;

2022.1.14.解决在UE4 .2.5中的安装pak路径自动变成绝对安装路径的bug问题,增加必须cook资源的警告;

2022.1.17.解决本地打包无法写入版本信息的buf,以及本地补丁打包bug;

2022.1.18.增加了读取UMG Widget的方法;

2022.3.2.增加了pak包打包后对pak各项打印到日志的功能;

2023.5.26.增加了http和https选择,修复了local版本不依赖服务器版本的问题;

2023.5.26.优化了HTTP上传,local上传,暴漏版本对象更新;

2023.5.27.增加客户端感应更新,修复丢弃包后客户端卡死问题.

2023.5.28.新增无缝热更新,不需要第三方程序便可以热更新,但是不支持C++热更新,只支持蓝图脚本和资源。

2023.5.28.支持安卓散包热更新,安卓各种打包平台支持。

《“智能热更新插件v2”》 有 41 条评论

  1. […] 文档 下载 评论(0) 哈喽,大家好,这里介绍一款工具,SimpleViewPak,可以帮助我们快速查看pak是否正确: 在您打包pak的时候确保将如下的内容勾掉 并且将共享材质去掉   该工具的界面如下   PakPath:需要指定一个Pak AES:如果这个包被加密了,需要一个密钥 MountPoint:需要指定一个安装路径(如果您用的是SimpleHotUpdate来打包,这个可以为空) […]

  2. hanming说道:

    请问支持UE5.0.3吗?

  3. wanhuodetuzi说道:

    HTTP的我提示push成功了,打开文件夹里面是空的

  4. feng说道:

    就不留个联系方式?我有些问题都没法问只能等你回复了

  5. blank说道:

    能开发票吗

  6. feng说道:

    很棒,从头到尾都没看到怎么自动更新版本,完全就卡在了上传主版本之后再更新主版本再启动第一个版本也没有自动下载第二个主版本,也搞不明白你做这个插件到底是为了捆绑课程还是怎么样,不推荐各位在未购买对应课程的情况下购买该插件不然你会发现跟我一样下完插件看文档只说怎么上传文件没说怎么实现有哪些函数等等,简而言之就是购买需谨慎。

  7. njzlrjkj说道:

    我无法上传文件 但是能自动创建文件夹,Version文件夹就一个MutexVersion.con文件其它的没有

  8. njzlrjkj说道:

    你好 我还是无法使用 ,我是在你网站购买的,请问怎么联系你帮我远程看看 谢谢老师,我没有你联系方式。
    我无法上传文件 但是能自动创建文件夹,Version文件夹就一个MutexVersion.con文件其它的没有
    这个是错误信息
    LogSimpleHTTP: Warning: HttpRequestComplete URL=http://updates.itcg.cn/PakDete/Windows/Version/ServerVersion.con,Param=
    LogHTTPObjectStorageClient: Display: Get URL = http://updates.itcg.cn/PakDete/Windows/Version/Patch
    LogHTTPObjectStorageClient: Display: Update To HTTP Server PakLocalPaths = F:/GC_UE5/Pak,URL=http://updates.itcg.cn/PakDete/Windows/Version/Patch/login.pak
    LogSimpleHTTP: Warning: HTTP error code [404] Msg[
    404 Not Found

    404 Not Found
    nginx

    ].
    LogHTTPObjectStorageClient: Display: Send HTTPServer Progress = 100.000000 %
    LogSimpleHTTP: Warning: HttpRequestComplete URL=http://updates.itcg.cn/PakDete/Windows/Version/Patch/login.pak,Param=
    LogHTTPObjectStorageClient: Display: Update login.pak is OK.
    LogHTTPObjectStorageClient: Display: URL =
    LogSimpleHTTP: Warning: HTTP error code [405] Msg[
    405 Not Allowed

    405 Not Allowed
    nginx

    ].
    LogSimpleHTTP: Warning: HttpRequestComplete URL=http://updates.itcg.cn/PakDete/Windows/Version/ServerVersion.con,Param=
    LogHTTPObjectStorageClient: Display:
    405 Not Allowed

    405 Not Allowed
    nginx

    LogHTTPObjectStorageClient: Display: PutServerVersion is OK.
    LogSimpleHTTP: Warning: HTTP error code [405] Msg[
    405 Not Allowed

    405 Not Allowed
    nginx

    ].

    • 人宅回复人宅说道:

      我们已经在录制免费的这个插件使用方法,在qq群里面随便加一个咨询群,找到我,私聊我。

      • njzlrjkj回复njzlrjkj说道:

        还有这个插件是必须要使用C++工程吗,我如果把插件放引擎插件目录打包出来运行提示:UATHelper: 打包 (Windows): Plugin ‘SimpleHotUpdate’ (referenced via SimpleHotUpdate.uproject) does not contain the ‘SimpleHotUpdate’ module, but lists it in ‘D:\UnrealEngine\Engine\Plugins\SimpleHotUpdate\SimpleHotUpdate.uplugin’.;
        用C++工程,把插件放项目插件目录里面打包出来就正常,但是无法上传pak文件到我自己的网站服务器

  9. njzlrjkj说道:

    UATHelper: 打包 (Windows): Plugin ‘SimpleHotUpdate’ (referenced via SimpleHotUpdate.uproject) does not contain the ‘SimpleHotUpdate’ module, but lists it in ‘D:\UnrealEngine\Engine\Plugins\SimpleHotUpdate\SimpleHotUpdate.uplugin’.

  10. njzlrjkj说道:

    老师 我在线等你帮我解决一下问题 ,一个是无法上传到我服务器,另一个是无法加载文件 啊啊啊

  11. tuya说道:

    安卓更新没往后更啊 都等了一年多了还没

  12. hanming说道:

    您好,请问我使用Local打包PAK到本地,PAK大小只有1K是什么原因,测试加载成功,但是没有内容,如何你能联系到您

  13. wxiaop说道:

    4.27的代码改都没改,新版只有最新的呗

  14. amuropei说道:

    支持5.3吗?

发表回复

一.商业版本和学习版本的对比

二.您还未登陆哦

三.该资源出自以下课程

四.相关解决方案

付费版本包含源码,可以二次开发,如果您不需要二次开发,或者想先试用一下,那么我建议先用免费版本,有的免费版本需要登录。

如果免费版本蓝图无法启动,请点击我,里面有解决方案

如果有问题 请加入 售后QQ群:946331852 我们会收集问题,安排维护

如果有希望新增的功能也可以反应到售后,我们会安排添加,感谢理解。

五.社区版本(主要针对不需要登录本站的用户)

资源推荐

更多>>

.

奔溃报告服务器

人宅 1
¥free

.

自动化游戏测试Demo

人宅 9
¥free

.

自动化-实用工具

人宅 16
¥free

.

工具链合集

人宅 17
¥free

.

在线和离线虚拟人工程

人宅 99
¥free

.

无人直播-视频播放器

人宅 26
¥free

.

弹幕回复Client工具

人宅 20
¥free

.

UE与情绪识别

人宅 0
¥98.00

.

UE与百度翻译

人宅 0
¥98.00

.

UE通义千问

人宅 8
¥98.00

.

人工智能自动化安装

人宅 44
¥free

.

高效的本地ini配置

人宅 1
¥48.00

.

DH音频与口型同步

人宅 58
¥free

.

音频转口型服务器

人宅 47
¥free

.

UE5百度文心一言插件

人宅 27
¥98.00

.

UE与PaddleSpeech

人宅 35
¥198.00

.

UE与ChatGLM插件

人宅 29
¥98.00

.

UE与Stablediffusion

人宅 23
¥88.00

.

Bilibili直播插件

人宅 14
¥168.00

.

音频转口型客户端插件

人宅 57
¥198.00

.

UE ChatGPT

人宅 37
¥128.00

.

UE 阿里云智能语音

人宅 63
¥198.00

.

连招战斗插件

人宅 31
¥98.00

.

GAS技能扩展插件

人宅 33
¥98.00

.

DX12独立引擎

人宅 17
¥2980.00

.

对象浏览插件

人宅 66
¥29.00

.

SBL库

人宅 104
¥98.00

.

弹窗插件

人宅 77
¥28.00

.

数值升级伤害推演工具

人宅 84
¥188.00

.

智能热更新插件v2

人宅 234
¥198.00

.

UE高级动画插件

人宅 101
¥48.00

.

SimpleProtobuf

人宅 168
¥298.00

.

幻灯片插件

人宅 66
¥58.00

.

图片格式转UTexture2D

人宅 74
¥38.00

.

分布式服务器插件

人宅 257
¥396.00

.

视频播放器插件

人宅 132
¥68.00

.

RENZHAI版本Git小程序

人宅 116
¥28.00

.

屏幕移动操作插件

人宅 201
¥39.00

.

绘制攻击字体效果插件

人宅 178
¥29.00

.

UE4 zip压缩插件

人宅 269
¥38.00

.

Pak散包查看器

人宅 269
¥32.00

.

打pak和读pak插件

人宅 286
¥free

.

UE4Mysql数据库插件

人宅 236
¥98.00

.

智能热更新插件

人宅 274
¥free

.

UE4文件读取插件

人宅 313
¥8.00

.

UE5HTTP插件

人宅 351
¥48.00

.

UE5对象储存OSS插件

人宅 217
¥98.00

.

UE5多线程插件

人宅 284
¥88.00