UE4 C++(20) UnrealPak打包和打补丁

12/27/2020

前言

最近在学习热更新,即如何对游戏打补丁,找到一款不错的插件HotPatcher来提升这方面的知识 补丁插件讲解或者知乎链接
从中可以获取的知识:

  • 如何使用Slate C++来制作UE4的界面
  • 打包或者打补丁的过程
  • Commandlet源码的运用和学习

为什么需要热更新,当游戏上架之后,如果出现资源问题,我们不能要求客户重新下载所有资源,我们需要上传体积小并只更新有问题的资源,同时游戏也只加载更新过后的资源,那么客户也只需要下载更新之后的资源。

打包(Package)

UE4的打包方式有很多种,但是根本离不开UnrealPak.exe工具(\Engine\Binaries\Win64\UnrealPak.exe)

注意打包的资源是cooked之后的资源,即与平台相关的资源

资源类型

资源的种类有很多,都放在Content目录文件中

  • 模型材质(.uasset)
  • 地图(.umap)
  • 动画
  • 蓝图

当结束Cook之后,资源都会存在这个路径下[ProjectFile]/Saved/[WindowsNoEditor]/[ProjectName]/Cooked/

D:\UE4\UE_4.25\Engine\Binaries\Win64\UE4Editor-Cmd.exe D:\unrealEngin4WorkStation\TestPatch\TestPatch.uproject -run=Cook  -TargetPlatform=WindowsNoEditor -fileopenlog -unversioned -abslog=D:\UE4\UE_4.25\Engine\Programs\AutomationTool\Saved\Cook-2020.12.19-16.15.26.txt -stdout -CrashForUAT -unattended -NoLogTime
s  -UTF8Output

查阅Output Log可以发现Cook执行的命令

  • run:Cook
  • TargetPlatform:WindowsNoEditor
  • unversioned:没有版本
  • abslog:输出文件路径
    第一次Cook数据需要花费较长的时间,之后有Cook数据可以使用-iterative指令在已有的资源迭代更新

执行打包命令

D:\unrealEngin4WorkStation\TestPatch\TestPatch.uproject D:\unrealEngin4WorkStation\TestPatch\Saved\StagedBuilds\WindowsNoEditor\TestPatch\Content\Paks\TestPatch-WindowsNoEditor.pak -create="C:\Users\Alex\AppData\Roaming\Unreal Engine\AutomationTool\Logs\D+UE4+UE_4.25\PakList_TestPatch-WindowsNoEditor.txt"
 -cryptokeys=D:\unrealEngin4WorkStation\TestPatch\Saved\Cooked\WindowsNoEditor\TestPatch\Metadata\Crypto.json -order=D:\unrealEngin4WorkStation\TestPatch\Build\WindowsNoEditor\FileOpenOrder\CookerOpenOrder.log -patchpaddingalign=2048 -platform=Windows -compressionformats=  -multiprocess -abslog="C:\Users\Alex\AppData\Roaming\Unreal Engine\AutomationTool\Logs
\D+UE4+UE_4.25\UnrealPak-TestPatch-WindowsNoEditor-2020.12.19-16.25.30.txt"

[ProjectName]\Package\WindowsNoEditor\TestPatch\Content\Paks存储了Cooked资源内容和路径搜索

这串命令行有两个输出文本,一个叫PakList_TestPatch-WindowsNoEditor.txt这个文件记录加载和挂载资源的路径并由.pak文件保存

HotPatcher插件

最重要的函数之一:DoExport

  • 获取release.json中的数据
  • 获取资源信息(ExportReleaseVersionInfo函数
  • 输出数据到外部文件

获取资源信息(GetAssetData)

//ReleaseProxy.h
//PatcherProxy.h

// DoExport函数中的ExportReleaseVersionInfo 函数
//HotPatcher插件最重要的函数,如何导出资源信息

#include "ARFilter.h"
#include "AssetRegistryModule.h"

bool UFLibAssetManageHelperEx::GetAssetsData(const TArray<FString>& InFilterPackagePaths, TArray<FAssetData>& OutAssetData)
{
   
	OutAssetData.Reset()
  • 1
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值