UE4资源————Pak

UE4Cook前的资源格式通常为.uasset,.umap,资源打包时,会默认把这些格式的文件打包进资源包,打包后的资源文件后缀为.pak。

一、资源打包设置:

1.设置打包参数:打开ProjectSettings->Project->Packaging来设置打包参数:
在这里插入图片描述
这里有很多控制Cook和打包pak的参数,解释几个:
UsePakFile:True表示资源打包为.pak,如果不勾选,表示不打包Pak,资源会被原封不动的Copy到包里;
List of maps to include in a packaged build:这里添加要打入包的Map,如果这里为空,则默认所有Map打包Pak,反之则只打包这里添加的Map;
Additional Non-Asset Directories To Package(Copy):UE打包只会打包那些它自己承认的资源格式,比如上边提到的.uasset,umap,还有Cook后的.uexp,.ubulk,插件的.uplugin等,除此之外,如果我们自己想加一个文件,比如说.json到Pak中,就要在这里配置一下。

二、打包Pak

方法一:设置好参数,直接出包,然后就可以在游戏的Game/Content/Paks目录下看到pak文件。
方法二:打包pak时,其实调用引擎目录下的Engine/Win64/UnrealPak.exe,对应的代码是在UnrealPak.cpp里
在这里插入图片描述
代码及其精简,主要逻辑还是在PakFileUtilities.cpp里,我们上边的设置,最终都会在打包流程中处理成参数传入ExecuteUnrealPak,在此函数的最后可以看到可以传入的参数代表的意义:
在这里插入图片描述
使用方法:

  • 打包Pak:UnrealPak.exe <.pak生成路径> -Create=<PakList路径>
    其中PakList表示要打包的资源,UE自己生成的PakList在“C:User\AppData\Roaming\Unreal
    Engine\AutomationTool\Logs\x+engine\PakList_<pak名>.txt”,我们也可以写通配符,比如:
    在这里插入图片描述
  • 解包Pak:UnrealPak.exe <.pak路径> -Extract <解包路径>
  • 其他参数:
UnrealPak <PakFilename> -Test
UnrealPak <PakFilename> -List
UnrealPak <PakFilename> -Dest=<MountPoint>
UnrealPak GenerateKeys=<KeyFilename>
UnrealPak GeneratePrimeTable=<KeyFilename> [-TableMax=<N>]
UnrealPak <PakFilename1> <PakFilename2> -diff
UnrealPak -TestEncryption
Options:
-blocksize=<BlockSize>
-bitwindow=<BitWindow>
-compress
-encrypt
-order=<OrderingFile>
-diff (requires 2 filenames first)
-enginedir (specify engine dir for when using ini encryption configs)
-projectdir (specify project dir for when using ini encryption configs)
-encryptionini (specify ini base name to gather encryption settings from)
-extracttomountpoint (Extract to mount point path of pak file)
-encryptindex (encrypt the pak file index, making it unusable in unrealpak without supplying the key)
-compressionformat[s]=<Format[,format2,...]> (set the format(s) to compress with, falling back on failures)

如果只是为了生成pak,我们可以直接通过这种方式生成Pak,跳过了Build、Cook等待阶段。我们也可以自定义一些参数,做一些自己的逻辑。

三、Patch

UE4的打包原理是:
1.先打包一个release的发布包,这个是玩家第一次拿到游戏时所包含的资源包,我们称它为母包。
2.之后在生成pak的时候,用当前的资源和母包进行对比,得到的差异生成的pak,则为下一次的Patch。

要生成Patch,这里我们就要用到UE4的UAT打包工具,它在UE的Engine\Build\BatchFiles目录下,打开cmd输入出包命令:
"RunUAT.bat -ScriptsForProject= BuildCookRun -nocompile -nocompileeditor -project= -clientconfig=Development -ue4exe=UE4Editor-Cmd.exe -targetplatform=Win64 -utf8output -cook -stage -pak -archive -package"

生成Patch需要增加以下参数:
生成Release的时候: -createreleaseversion=1.0 -createreleaseversionroot=<pak存放路径>
生成Patch的时候:-generatepatch -basedonreleaseversion=1.0 -basedonreleaseversionroot=<release pak的路径>

Pak文件内容:
在整个打包流程中,Pak之前有一步流程是Cook,Cook是把项目资源烘焙为对应平台的资源,然后Pak阶段把Cook后的对应平台的资源打包为.pak,.pak文件中包含了:
工程文件:.uproject
配置文件:.ini
插件配置文件:.uplugin
Engine Content下的文件:.png,.res,.ttf(源文件格式)
游戏项目资源文件:.uasset,.umap,.uexp,.ubulk
以上都是默认添加的,还有其他我们自己设置添加的文件

4.Pak文件结构

.Pak文件(FPakFile):
{
	序列化文件(FPakEntry):
	[
		文件偏移
		文件大小
		解压后大小
		压缩方式
		时间戳(可选)
		Hash(验证文件是否被修改)
		压缩块(可选:记录如何解压这个文件)
		标记(可选:标记是否加密,是否删除)
		压缩块大小(可选)
		
		文件内容
	]
	挂载点
	文件数量
	[
		文件名
		序列化文件(同上)
	]
	秘钥
	加密标记
	魔数
	版本号
	Pak索引偏移
	Pak索引大小
	Hash
}

未完待续……

  • 3
    点赞
  • 24
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值