虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

虚幻的热更新-在线更新地图/角色/材质···

一、什么是热更新?

  • 客户端热更新(以下简称热更新或热更),指的是游戏玩家不无需下载全新的软件安装包进行版本更新,如更新新的地图/角色/功能…一般采用Lua进行热更代码编写,emm太麻烦,这里我推荐使用Pak处理工具。

二、什么是Pak?

  • Pak 文件是 Unreal Engine打包素材的文件。一个 Unreal 程序可以使用或者不使用 Pak 来管理素材。Unreal 的 Pak 文件内包括了网格体,材质,Blueprint,Map等等。Level 也就是关卡以 map 的形式保存。
  • Pak 文件的加载类似文件系统加载一个外接硬盘,你可以理解为你的游戏包外插了一个U盘,然后游戏读取该U盘的内容。

三、获取插件

  • 插件获取途径如下
  • 这会收取部分教程费,当然你在别处买了也可以看此教程hh

 

四、—-使用方法—-

  • 我这里创建一个新的空白项目进行演示,项目各种命名,如变量/项目名,大家尽量跟着我起,pak命名有一定的要求,主要我怕你没注意小细节导致跟不上,当然我会标注出来哪里需要注意。

注意:你需具备打包项目的基本要求:拥有对应的Visual studio版本和C++环境。简而言之:曾经在你的电脑上打包过项目。否则无法跟上此教程

如果无法满足要求,请先安装对应环境。教程网上有,我这里还没更新。

第一步:

  • 创造一个空项目。

  • 命名为PakTest

PakTest

图片[1]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

打开工程后将当前地图保存为NewMap,并在项目设置中保存为默认地图。

重要:因为此是新项目,没有保存默认地图无法正确烘培,导致后续步骤出错

图片[2]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

图片[3]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

第二步:

  • 创建空白插件

打开项目后,在上方菜单栏创建插件,步骤如下:

图片[4]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

弹出插件窗口后,点击添加

图片[5]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

然后又弹出一个窗口,添加空白插件,名为 TestDLC。(名字Follow Me!)

图片[6]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

接着你的内容浏览器内就出现了对应的插件

图片[7]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

这个插件用来干什么呢?这里的插件将会被我们代替为“U盘”,也就是我们现在创建空插件的行为可以理解为分盘,给项目分配了一个“存储空间”,后面将更新内容放入插件的“内存”里,项目再读取新插件的“内存”进行交互,就热更完成了。

右键该文件夹,选择在浏览器中显示

图片[8]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

然后选择项目的Plugins路径

图片[9]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

将下载好的对应版本插件放进此文件夹内

图片[10]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

重要:创建一个C++空文件,转为C++项目,如果不执行此步骤,插件PakLoader可能不被项目所识别。

图片[11]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

图片[12]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

点击运行按钮,生成解决方案,编译成功一次即可退出,就可以恢复用原来的方式打开工程。

图片[13]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

如果你的VisualStudio版本为17.9.X,有可能会报错,请回退到17.8.X,或者更新至17.10.X。更新方式如下:

Error (C2248) 虚幻5.3.2 VS项目编译错误-虚幻社区

第三步:

  • 创建Pak内容

图片[14]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

图片[15]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

选中TestDLC,在插件内部右键创建关卡,命名为TestMap

图片[16]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

随便加点细节,知道这个是新关卡就行了,记得保存一下项目,修改下项目设置

将项目中以下两个选项取消勾选,地图才能正常显示和正确生成Pak

use io store
share material shader Code

图片[17]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

第四步:

  • 创建Pak文件

图片[18]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

在窗口–>Pak Creator ,打开Pak Creator插件。如果你没有这按钮,说明你没在Plugins文件夹下添加插件

图片[19]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

简单来说:

  1. 选择自己创建的空插件
  2. 选择输出路径
  3. 点击创建
  4. 等待完成

图片[20]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

最终得到.Pak文件,就可以放到服务器上供客户端下载,这里不讲述如何制作服务器,你可以用Node的Express,python的Flask,买个腾讯云/阿里云服务器搞就行,这里只讲述本地引用Pak进行动态更新。

图片[21]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

  • 查看Pak文件列表

我们可以检查下Pak文件是否存在TestMap文件。

打开你的引擎目录:UE_5.3\Engine\Binaries\Win64

在该路径下输入CMD,按下回车唤起命令行窗口

图片[22]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

//UnrealPak.exe -List <你的Pak路径>
//例如
UnrealPak.exe -List C:\Users\oy\Desktop\TestPakFile\TestDLCPakTest-Windows.pak

图片[23]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

如果到此步骤没有出错,则说明PakCreator成功!有其他问题请留言。

第五步:

  • 读取Pak文件

这边只介绍如何用蓝图读取,C++读取方式在插件-PakLoader的PDF文档有,请自行查看

  • 进入关卡蓝图

在内容Content内打开项目保存的主场景:NewMap,双击进入地图,并打开关卡蓝图

 

图片[24]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

 

  • 编写蓝图指令

双击打开蓝图,复制以下指令进去,指令已有注释,不做过多解释。左上角(聚焦以下指令滚轮滚上去)Fullscreen可全屏,全选复制到PakLoader内,复制后编译肯定会报错的(因为有设置变量),跟着下一步做就行。

 

正如上述所说复制进去肯定是会出错的,因为有新变量,接下来根据此步骤即可修复:

  • 连接执行事件

图片[25]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

在注释处连接执行事件,这里以Event BeginPlay(事件开始运行时)举例,连接后,

点击左上角编译会出现报错,如:ERROR:变量不存在

图片[26]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

报错主要为变量不存在,左键点击此变量,右键创建此变量,再次点击编译。左键选中后,自己多试几次右键,有时候不好出现。

图片[27]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

创建后再次编译,此变量错误就会修复,其外还有两个变量需要创建,即共需创建三个变量。建议创建一个编译一次,方便找。

ProjectDirctory:项目路径,创建即可,无需输入

PackPathPak路径,需输入(发现变量名打多了c,讲究一下把)

PluginsName你创建的空插件名,需输入。

后面会给出输入示例,先完成创建步骤:

图片[28]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

为变量赋予默认值(正式项目用函数输入参数)

PackPath存放pak文件的路径\TestDLCPakTest-Windows.pak

PluginsNameTestDLC (创建的插件名)

图片[29]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

为了方便,可以将复制的指令(除了事件)都折叠为函数,命名为LoadPak

图片[30]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

图片[31]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

 

  • 打包测试

因为在上面的步骤中,创建了TestMap并存在空插件内生成了Pak文件。所以Pak会包含TestMap地图,那么程序在执行LoadPak后就能获取该地图,所以添加一个打开地图的指令。地图名称要对应上

图片[32]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

然后将TestDLC空插件新创建的地图删除。别问为什么删除。。。要是游戏本身就有该地图,还热更干嘛。

图片[33]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

删除后,保存一下再打包项目。

图片[34]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

运行打包后的项目,成功进入地图!

图片[35]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

Loader插件内置了很多指令,如加载材质,加载Mesh,动画文件等等,按道理讲是什么都可以的,蓝图指令,接口什么的,因为这属于外置U盘,只是怎么加载适合你的项目就需要自己设计了。

图片[36]-虚幻的热更新-在线更新地图/角色/材质···-虚幻引擎相关论坛-问题反馈-虚幻社区

 

请登录后发表评论

    没有回复内容