介绍
此插件的目的是为了更好地读取.zip压缩文件,功能参考PakPlatformFile。
如果你了解UE4的pak的话,可以发现pak与zip文件有很多相似的地方。
同样可以通过.zip文件来打包UE4的资源(.uasset、.umap等),并用于加载😄。
特性
- 内存中解压,不占用磁盘空间
- 仅支持读取
- 使用UE4自带的zlib进行解压
- 挂载和卸载
- 挂载点
- 解压密码
- 蓝图方法
使用方法
可以从https://github.com/jixingcn/ZipPlatformFile下载源码,并解压到您的UE4项目Plugins目录中,或者以子模块形式加入到UE4的git项目中。

示例
假设一个D:\test.zip文件,其密码为password,并且有如下目录结构:
- scheme.json
- companies/
- companyA/
- users/
- john.json
- john.xlsx
 
 
- users/
- companyB/
- users/
- lily.json
- lili.docx
- lily.xlsx
 
 
- users/
 
- companyA/
挂载.zip文件
通过UZipPlatformFileBlueprintFunctionLibrary::Mount挂载该文件,将其挂载点设置为/Game/test_zip:
蓝图:
代码:
UZipPlatformFileBlueprintFunctionLibrary::Mount(this, TEXT("/Game/test_zip"), TEXT("D:\\test.zip"), TEXT("password"));
这个挂载点可以由你自己来决定,不过根目录需要按照
UE4官方的目录映射关系来。如:
/Engine:对应项目的引擎的Content目录
/Game:对应项目的Content目录
/ZipPlatformFile:对应项目的Plugins/ZipPlatformFile/Content目录文件无密码,则密码处为空。
读取.zip中的文件
加载该文件companies/companyB/users/lily.json的内容:
蓝图:
代码:
FString LilyJsonContext;
FFileHelp::LoadToString(TEXT("/Game/test_zip/companies/companyB/users/lily.json"), LilyJsonContext);
/// 或者
UZipPlatformFileBlueprintFunctionLibrary::LoadFileToString(this, TEXT("/Game/test_zip/companies/companyB/users/lily.json"), LilyJsonContext);
加载该文件companies/companyB/users/lily.xlsx的内容:
TArray<uint8> LilyXlsxContext;
FFileHelp::LoadFileToArray(TEXT("/Game/test_zip/companies/companyB/users/lily.xlsx"), LilyXlsxContext);
/// 或者
UZipPlatformFileBlueprintFunctionLibrary::LoadFileToArray(this, TEXT("/Game/test_zip/companies/companyB/users/lily.json"), LilyXlsxContext);
判断是否存在文件或目录
蓝图:
代码:
FPaths::FileExists(TEXT("/Game/test_zip/scheme.json"));
/// 或者
UZipPlatformFileBlueprintFunctionLibrary::FileExists(this, TEXT("/Game/test_zip/scheme.json"));
FPaths::DirectoryExists(TEXT("/Game/test_zip/companies/companyA"));
/// 或者
UZipPlatformFileBlueprintFunctionLibrary::DirectoryExists(this, TEXT("/Game/test_zip/companies/companyA"));
获取文件或目录的创建时间和访问时间
蓝图:
代码:
FDateTime CreationTime, AccessTimeStamp;
UZipPlatformFileBlueprintFunctionLibrary::GetTimeStamp(this, TEXT("/Game/test_zip/companies/companyA/users/john.xlsx"), CreationTime, AccessTimeStamp);
获取文件或目录的状态
FFileStatData FileStatData;
UZipPlatformFileBlueprintFunctionLibrary::GetFileStatData(this, TEXT("/Game/test_zip/scheme.json"), FileStatData);
卸载.zip文件
蓝图:
代码:
UZipPlatformFileBlueprintFunctionLibrary::Unmount(this, TEXT("D:\\test.zip"));
注意
此插件是对IPlatformFile模块的扩展,所以在读取文件时要通过IPlatformFile或FFileHelper或FPaths或UZipPlatformFileBlueprintFunctionLibrary的接口来加载。
如果你要使用.zip来打包和加载UE4资源,和pak一样要注意挂载点的路径。
后续更新
感谢
https://blueprintue.com/ 是一个非常棒👍的网站,它能够很容易地在网页上展示蓝图。