ue4挂载其他工程生成的pak,打开level
生活随笔
收集整理的這篇文章主要介紹了
ue4挂载其他工程生成的pak,打开level
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
1.pak的MountPoint的計算
UE4在創建pak文件時會對MountPoint進行計算,用一句話來概括計算邏輯就是:UE4會收集所有打包到pak中的文件,然后提取它們目錄的公共部分作為MountPoint
?
下面以一個例子來說明。假設我們有3個文件需要打包到pak中,它們的路徑分別為"../../../MyProject/Content/A.uasset"、"../../../MyProject/B.uasset"以及"../../../C.uasset"。
2.FPackageName::RegisterMountPoint
根據上面的算法,不同project的pak,uasset的路徑都會帶上"MyProject/Content/"和"MyProject2/Content/"這樣的路徑。
加載的時候,需要增加一個全局的MountPoint來替換這個加載路徑
3.獲取生成pak的Project Name
?根據pak的生成規則,需要獲取到pak工程對應的Project Name
這里使用"/Mod/"來作為pak的RootPath.
4.加載pak并設置MountPoint
//搜索pak文件TArray<FString> Result;IFileManager::Get().FindFiles(Result, *Dir, TEXT("*.pak"));FPakPlatformFile* PakFileMgr = (FPakPlatformFile*)FPlatformFileManager::Get().GetPlatformFile(FPakPlatformFile::GetTypeName());for (auto& Pair : Result){auto FilePath = Dir + Pair;UE_LOG(LogTemp, Warning, TEXT("PreLoadMod %s"), *FilePath);FPakFile* Pak = new FPakFile(&PlatformFile, *FilePath, false);if (Pak->IsValid()){FString MountPoint(*Pak->GetMountPoint()); //獲取Pak上的掛載點UE_LOG(LogTemp, Warning, TEXT("GetMountPoint %s"), *MountPoint);//從pak文件名中獲取打包的ProjectNameFString Left, Right;FPaths::GetBaseFilename(FilePath).Split(TEXT("-"), &Left, &Right);MountPoint.ReplaceInline(TEXT("../../../"), *FPaths::ProjectDir());Pak->SetMountPoint(*MountPoint);//設置pak的全局搜索路徑FPackageName::RegisterMountPoint("/Mod/", Pak->GetMountPoint()+ Left + TEXT("/Content/"));if (PakFileMgr->Mount(*(Dir + Pair), 0, *Pak->GetMountPoint())){//帶上/Mod/作為搜索路徑,避免默認從/Game/中搜索UGameplayStatics::OpenLevel(GetWorld(),FName(TEXT("/Mod/Test")));}}?
?
?
總結
以上是生活随笔為你收集整理的ue4挂载其他工程生成的pak,打开level的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: GPS模块运用: GPS模块数据提取、常
- 下一篇: 轻量级微服务架构