我在 Android 上的虚幻引擎中安装 PAK 文件时遇到问题。成功挂载 PAK 文件后,其中包含的资产将按预期工作。但是,我注意到以前存在的文件(未包含在 PAK 文件中的文件,位于基本目录中)在 Android 上不再有效。奇怪的是,在 Windows 上,一切正常。
这是我正在使用的相关代码片段:
bool AMyGameMode::MountPakFile(FString PakFilePath, const FString& PakFileName)
{
bool bIsSuccess = false;
if(!PakFilePath.EndsWith(TEXT("/")))
{
PakFilePath += TEXT("/");
}
const FString FullPakFilePath = PakFilePath + PakFileName + TEXT(".pak");
LogWriteMessage(FString::Printf(TEXT("PakFile Path: %s"), *FullPakFilePath), FColor::Green);
IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
FPakPlatformFile* PakPlatformFile = new FPakPlatformFile();
PakPlatformFile->Initialize(&PlatformFile, TEXT(""));
if(PlatformFile.FileExists(*FullPakFilePath))
{
LogWriteMessage(TEXT("PakFile Exists"), FColor::Green);
FPlatformFileManager::Get().SetPlatformFile(*PakPlatformFile);
bIsSuccess = PakPlatformFile->Mount(*FullPakFilePath, 0, NULL);
if(bIsSuccess)
{
LogWriteMessage(("PakFile Mounted Successfully"), FColor::Green);
}
else
{
LogWriteMessage(("PakFile Mount Failed"), FColor::Red);
}
}
else
{
LogWriteMessage(TEXT("PakFile Does not Exist"), FColor::Red);
}
return bIsSuccess;
}
当我在Android上调用MountPakFile函数时,传递以下参数:
MountPakFile(TEXT("/data/data/com.package.name/files/assetpacks/pakchunk1/41/41/assets/"), TEXT("pakchunk1"));
在 Windows 上,使用参数:
MountPakFile(TEXT("E:\UE4 Packages\UltimateAppTest\PakFile"), TEXT("pakchunk1"));
在两个平台上,安装操作均成功,如日志消息所示。但是,在 Android 上,我注意到已安装的 PAK 文件内的资源工作正常,而以前存在的文件(PAK 文件外部)不再有效。这些文件在安装到 Android 上之前运行良好。
我已仔细检查文件路径并确保 PAK 文件存在于两个平台上的指定位置。然而,安装过程似乎在某种程度上影响了 Android 上基本文件的可访问性。
有没有人遇到过类似的问题,或者可以提供有关为什么会发生这种差异的见解?我特别想了解为什么 PAK 文件外部的文件在 Android 上不再有效,而 PAK 文件内部的资源却可以正常工作。
任何帮助或建议将不胜感激!
提前谢谢您。
在github项目中看到它保存了原始平台文件并在内容加载后恢复它。