更新UnrealPakViewer工具

UnrealPakViewer 是几年前做的一个工具,用来查看打包后的 pak 内的信息,之前的版本比较简陋,功能也很简单。最近抽空将界面,功能又完善了下。

源码地址: UnrealPakViewer

Release 版本下载: v1.0

如果你的项目对 Pak 格式进行了修改,那么需要将代码克隆到 Engine/Source/Programs 目录下,重新生成解决方案进行编译,目前在引擎版本 4.24 及以上可以编译通过,其他版本还没测试

如果没有进行修改,包括文件格式,AES加密方式,还是标准的 UE Pak,那么也可以直接使用编好的 Release 版。这个版本使用最新的 4.26 引擎编译,可以兼容低版本 Pak 文件

unrealpakviewer.png

摘要信息

summary.png

界面的上方是 Pak 文件的摘要信息,主要显示 Pak 文件的路径,挂载点,版本,文件大小,文件数,Pak 文件头大小,Pak 文件索引区大小,Pak 文件内容区大小和是否加密等信息

AssetRegistry 是用来判断 Pak 内文件的类型,默认是读取 Pak 内一起打包进去的 AssetRegistry.bin,如果没有打包,或者想要使用其他的 AssetRegistry,那么可以点击 Load Asset Registry 按钮手动加载。AssetRegistry 文件默认的生成路径是在 Saved/Cooked/[Platform]/[ProjectName] 下面

树视图

第一个标签是树形视图,用来查看 Pak 内文件的组织关系

treeview.png

树形文件组织关系

标签内容左半部分区域使用树形控件展示所有文件,如果是文件夹则会在旁边显示该目录在 Pak 内的大小占比,哪些目录占据空间大就一目了然了

treeview_left.png

文件详情

标签内容右半部分区域是选中树形控件中某项后,显示的具体信息

如果选中的是文件,则显示文件的包内路径,文件类型,原始大小,压缩大小,压缩方式,是否加密等信息

treeview_right_file.png

目录详情

如果选中的是目录,则显示目录的原始大小,压缩大小,压缩大小占比,目录内文件数量,并同时显示目录内的每种类型资源的分布情况,并支持升降排序

treeview_right_folder.png

文件视图

文件视图以列表形式列出 Pak 内的所以文件,包括类型,偏移,原始大小,压缩大小,压缩方式,是否加密等信息,并支持升降排序,按类型过滤文件,按关键字搜索过滤文件功能

fileview.png

按类型过滤文件

单击 Class Filter 下拉框,在框内选择每个类型的显示或者隐藏

fileview_classfilter.png

按关键字过滤文件

在搜索框输入关键字,会实时搜索匹配的文件,并高亮搜索关键字

fileview_search.png

解压

在树视图或者文件视图中,右键选中想要解压的文件或目录,在弹出的菜单中选择 Extract,就可以将 Pak 内的文件解压到磁盘上

extract.png

在菜单栏的 Options 菜单中可以配置解压的线程数量

extract_setting.png

导出信息

在树视图或者文件视图中,右键选中想要导出的文件或目录,在弹出的菜单中选择 Export,就可以将 Pak 内的文件信息导出成 json 或者 csv 格式

export.png

密钥支持

如果 Pak 是使用 AES 加密的,则在打开 Pak 的时候会弹出密钥输入框,需要输入正确的密钥后才能打开文件

encryption.png

后续计划

目前 UnrealPakViewer 已经基本满足各种需求,后续还会有一些开发计划,比如

  • 无 UI 的命令行程序,支持解压和导出
  • 直接识别文件类型,不需要额外的 AssetRegistry 文件
  • 资源预览功能(远期)

堡垒之夜

用 UnrealPakViewer 测试了一下堡垒之夜的 Pak,看看是否能打开,Epic 内部是不是会对 Pak 做一些私有化的修改。结果发现确实没有,堡垒之夜的 Pak 就是原生的格式,完全没有任何改动

还有其他有意思的地方,比如堡垒之夜的移动端版本采用的资源压缩算法是 Oodle ,之前做 TCP/UDP 数据包压缩的时候曾经接触过,没想到他的文件压缩也这么厉害。堡垒之夜的非移动端版本的资源是不压缩的,大概就是为了节省解压时间吧

堡垒之夜的最新版本用的引擎版本已经是 4.26 了,直接将最新的引擎应用到线上的游戏中,看起来很激进但是侧面也能反应出 Epic 对虚幻引擎的自信,佩服

fortnite.png