一、什么是热更新?
- 客户端热更新(以下简称热更新或热更),指的是游戏玩家不无需下载全新的软件安装包进行版本更新,如更新新的地图/角色/功能…一般采用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
打开工程后将当前地图保存为NewMap,并在项目设置中保存为默认地图。
重要:因为此是新项目,没有保存默认地图无法正确烘培,导致后续步骤出错
第二步:
创建空白插件
打开项目后,在上方菜单栏创建插件,步骤如下:
弹出插件窗口后,点击添加
然后又弹出一个窗口,添加空白插件,名为 TestDLC。(名字Follow Me!)
接着你的内容浏览器内就出现了对应的插件
这个插件用来干什么呢?这里的插件将会被我们代替为“U盘”,也就是我们现在创建空插件的行为可以理解为分盘,给项目分配了一个“存储空间”,后面将更新内容放入插件的“内存”里,项目再读取新插件的“内存”进行交互,就热更完成了。
右键该文件夹,选择在浏览器中显示
然后选择项目的Plugins路径
将下载好的对应版本插件放进此文件夹内
重要:创建一个C++空文件,转为C++项目,如果不执行此步骤,插件PakLoader可能不被项目所识别。
点击运行按钮,生成解决方案,编译成功一次即可退出,就可以恢复用原来的方式打开工程。
如果你的VisualStudio版本为17.9.X,有可能会报错,请回退到17.8.X,或者更新至17.10.X。更新方式如下:
第三步:
创建Pak内容
选中TestDLC,在插件内部右键创建关卡,命名为TestMap
随便加点细节,知道这个是新关卡就行了,记得保存一下项目,修改下项目设置
将项目中以下两个选项取消勾选,地图才能正常显示和正确生成Pak
use io store
share material shader Code
第四步:
创建Pak文件
在窗口–>Pak Creator ,打开Pak Creator插件。如果你没有这按钮,说明你没在Plugins文件夹下添加插件
简单来说:
- 选择自己创建的空插件
- 选择输出路径
- 点击创建
- 等待完成
最终得到.Pak文件,就可以放到服务器上供客户端下载,这里不讲述如何制作服务器,你可以用Node的Express,python的Flask,买个腾讯云/阿里云服务器搞就行,这里只讲述本地引用Pak进行动态更新。
查看Pak文件列表
我们可以检查下Pak文件是否存在TestMap文件。
打开你的引擎目录:UE_5.3\Engine\Binaries\Win64
在该路径下输入CMD,按下回车唤起命令行窗口
//UnrealPak.exe -List <你的Pak路径>
//例如
UnrealPak.exe -List C:\Users\oy\Desktop\TestPakFile\TestDLCPakTest-Windows.pak
如果到此步骤没有出错,则说明PakCreator成功!有其他问题请留言。
第五步:
读取Pak文件
这边只介绍如何用蓝图读取,C++读取方式在插件-PakLoader的PDF文档有,请自行查看
进入关卡蓝图
在内容Content内打开项目保存的主场景:NewMap,双击进入地图,并打开关卡蓝图
编写蓝图指令
双击打开蓝图,复制以下指令进去,指令已有注释,不做过多解释。左上角(聚焦以下指令滚轮滚上去)Fullscreen可全屏,全选复制到PakLoader内,复制后编译肯定会报错的(因为有设置变量),跟着下一步做就行。
正如上述所说复制进去肯定是会出错的,因为有新变量,接下来根据此步骤即可修复:
连接执行事件
在注释处连接执行事件,这里以Event BeginPlay(事件开始运行时)举例,连接后,
点击左上角编译会出现报错,如:ERROR:变量不存在
报错主要为变量不存在,左键点击此变量,右键创建此变量,再次点击编译。左键选中后,自己多试几次右键,有时候不好出现。
创建后再次编译,此变量错误就会修复,其外还有两个变量需要创建,即共需创建三个变量。建议创建一个编译一次,方便找。
ProjectDirctory
:项目路径,创建即可,无需输入。
PackPath
:Pak路径,需输入(发现变量名打多了c,讲究一下把)
PluginsName
:你创建的空插件名,需输入。后面会给出输入示例,先完成创建步骤:
为变量赋予默认值(正式项目用函数输入参数)
PackPath
:存放pak文件的路径\TestDLCPakTest-Windows.pak
PluginsName
:TestDLC (创建的插件名)
为了方便,可以将复制的指令(除了事件)都折叠为函数,命名为LoadPak
打包测试
因为在上面的步骤中,创建了TestMap并存在空插件内生成了Pak文件。所以Pak会包含TestMap地图,那么程序在执行LoadPak后就能获取该地图,所以添加一个打开地图的指令。地图名称要对应上
然后将TestDLC空插件新创建的地图删除。别问为什么删除。。。要是游戏本身就有该地图,还热更干嘛。
删除后,保存一下再打包项目。
运行打包后的项目,成功进入地图!
Loader插件内置了很多指令,如加载材质,加载Mesh,动画文件等等,按道理讲是什么都可以的,蓝图指令,接口什么的,因为这属于外置U盘,只是怎么加载适合你的项目就需要自己设计了。
没有回复内容