UE4.27.2 UnrealPAK Repack 功能分析
2025-05-20 22:58:09
从入口进来
1 | // Engine/Source/Developer/PakFileUtilities/Private/PakFileUtilities.cpp: |
进到 Repack 选项这个 if else
这里可以读取相同文件名后缀所有 pak 文件,输出的 pak 文件一一对应
然后可以配置 ExcludeDeleted 选项,是否跳过输入的 pak 文件中被删除的内容,这个很有意思
然后就是具体的重新打包的逻辑
1 | // Engine/Source/Developer/PakFileUtilities/Private/PakFileUtilities.cpp: |
这里一开始就是剔除掉删除的文件的内容
1 | if (ExtractFilesFromPak(*InputPakFile, Hashes, *TempDir, false, InKeyChain, nullptr, &Entries, &DeletedEntries, &OrderMap, &EncryptionKeys, &bAnySigned)) |
具体进到 ExtractFilesFromPak
里面是可以看到,如果传入的 OutDeletedEntries
不是 null,那么也会把源 PAK 中 tag 被标记为 deleted 的文件给解压出来
之后就是重新压缩的事了
其实比较简单,但是就是需要走他自己的一些特殊处理的流程
本来我想修改这个函数来实现自己的目的,但是这是一个私有文件
如果要把函数暴露出来,就要改源码
如果是一些非得改不可的功能,那公开了也行
但是仔细考虑的话,其实我从 cpp 调用 command 也不是不能接受
因为已经看过了 cpp 的 repack 实现,跟我自己通过 command 解压再压缩是一样的