介绍
此插件的目的是为了更好地读取.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/ 是一个非常棒👍的网站,它能够很容易地在网页上展示蓝图。