当前位置:   article > 正文

UE4 PAK加载资源_文件在pak中排序描绘文件

文件在pak中排序描绘文件

1.创建一个PAK文件:

用CMD运行打开D:\Epic Games\UE_4.15\Engine\Binaries\Win64下有个UnrealPak文件

cd到路径后 通过运行时传递参数 UnrealPak.exe [要生成的pak文件] -create=[要打包的文件列表] -order=[文件在pak中排序描述文件] [输出格式] [是否加密] [是否压缩]

例如:UnrealPak.exe test.pak -create=paklist.txt -order=CookerOpenOrder.log -UTF8Output -encrypt -compress

UnrealPak.exe D:\OutPak.Pak C:\Users\Administrator\Desktop\Client\UnrealProjects\IDHome\Content\Materials\bingxiang.uasset

这样就有一个PAK文件了,接下来创建代码

(txt里可以写文件夹如C:\wenjian\*)

/****************分割线**********************/

最新方案:

打包pak方法:

D:\Epic Games\UE_4.18\Engine\Binaries\Win64\UnrealPak.exe D:\UE4project\PakProj\out.pak -create="D:\UE4project\PakProj\plist.txt" -encryptionini -
enginedir="D:\Epic Games\UE_4.18\Engine" -projectdir="D:\UE4project\PakProj" -platform=Windows -abslog="C:\Users\Administrator\AppData\Roaming\Unreal Engine\AutomationTool\Logs\D+Epic+Games+UE_4.18\PakLog_PakProj-WindowsNoEditor.log" -installed -order=D:\UE4project\PakProj\Build\WindowsNoEditor\FileOpenOrder\CookerOpenOrder.log -UTF8Output -multiprocess -pat

chpaddingalign=2048

plist.txt里写:

"D:\UE4project\PakProj\Saved\Cooked\WindowsNoEditor\PakProj\*" "../../../PakProj/*" –compress

.h

  1. UFUNCTION(BlueprintCallable, Category = "PAK")
  2. void LoadPakComplete();
  3. UPROPERTY(EditAnywhere, BlueprintReadWrite, Category = "PAK")
  4. UObject* TheLoadObject ;
.cpp

#include "IPlatformFilePak.h"

  1. void AMyActor::LoadPakComplete()
  2. { //如果你想直接加载本地的pak的话,方法的参数列表删掉,然后把SaveArrayToFile这句话也删了,SaveContentDir填写你要加载的路径就可以了...
  3. //1.把下载好的文件保存起来
  4. FString SaveContentDir = FPaths::GameContentDir() + TEXT("OutPak.pak");
  5. //2.加载刚才保存的文件
  6. //获取当前使用的平台,这里使用的是WIN64平台
  7. IPlatformFile& PlatformFile = FPlatformFileManager::Get().GetPlatformFile();
  8. //初始化PakPlatformFile
  9. FPakPlatformFile* PakPlatformFile = new FPakPlatformFile();
  10. PakPlatformFile->Initialize(&PlatformFile, TEXT(""));
  11. FPlatformFileManager::Get().SetPlatformFile(*PakPlatformFile);
  12. //获取Pak文件
  13. FPakFile PakFile(*SaveContentDir, false);
  14. UE_LOG(LogClass, Log, TEXT("get PakFile..."))
  15. //设置pak文件的Mount点.
  16. FString MountPoint(FPaths::EngineContentDir()); //"/../../../Engine/Content/"对应路径
  17. PakFile.SetMountPoint(*MountPoint);
  18. //对pak文件mount到前面设定的MountPoint
  19. if (PakPlatformFile->Mount(*SaveContentDir, 0, *MountPoint))
  20. {
  21. UE_LOG(LogClass, Log, TEXT("Mount Success"));
  22. TArray<FString> FileList;
  23. //得到Pak文件中MountPoint路径下的所有文件
  24. PakFile.FindFilesAtPath(FileList, *PakFile.GetMountPoint(), true, false, true);
  25. FStreamableManager StreamableManager;
  26. //对文件的路径进行处理,转换成StaticLoadObject的那种路径格式
  27. FString AssetName = FileList[0];
  28. FString AssetShortName = FPackageName::GetShortName(AssetName);
  29. FString LeftStr;
  30. FString RightStr;
  31. AssetShortName.Split(TEXT("."), &LeftStr, &RightStr);
  32. AssetName = TEXT("/Engine/") + LeftStr + TEXT(".") + LeftStr; //我们加载的时候用的是这个路径
  33. FStringAssetReference reference = AssetName;
  34. //加载UObject
  35. UObject* LoadObject = StreamableManager.SynchronousLoad(reference);
  36. if (LoadObject != nullptr)
  37. {
  38. UE_LOG(LogClass, Log, TEXT("Object Load Success..."))
  39. TheLoadObject = LoadObject;
  40. }
  41. else
  42. {
  43. UE_LOG(LogClass, Log, TEXT("Can not Load asset..."))
  44. }
  45. }
  46. else
  47. {
  48. UE_LOG(LogClass, Error, TEXT("Mount Failed"));
  49. }
  50. }
这样就加载到内存了。

PS(最新参考https://blog.ch-wind.com/unrealpak-note/

https://arcecho.github.io/2017/07/02/UE4-Pak-%E7%9B%B8%E5%85%B3%E7%9F%A5%E8%AF%86%E6%80%BB%E7%BB%93/)

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/盐析白兔/article/detail/91233
推荐阅读
相关标签
  

闽ICP备14008679号