日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

ue4挂载其他工程生成的pak,打开level

發(fā)布時間:2023/12/14 编程问答 33 豆豆
生活随笔 收集整理的這篇文章主要介紹了 ue4挂载其他工程生成的pak,打开level 小編覺得挺不錯的,現(xiàn)在分享給大家,幫大家做個參考.

1.pak的MountPoint的計算

UE4在創(chuàng)建pak文件時會對MountPoint進行計算,用一句話來概括計算邏輯就是:UE4會收集所有打包到pak中的文件,然后提取它們目錄的公共部分作為MountPoint

?

下面以一個例子來說明。假設(shè)我們有3個文件需要打包到pak中,它們的路徑分別為"../../../MyProject/Content/A.uasset"、"../../../MyProject/B.uasset"以及"../../../C.uasset"。

  • 計算開始時,首先獲取最長的路徑,為"../../../MyProject/Content/"
  • 接著開始遍歷每個文件
  • 遍歷到"../../../MyProject/B.uasset"時,其路徑為"../../../MyProject/“,并不包含"../../../MyProject/Content/",因此公共路徑變?yōu)?#34;../../../MyProject/“
  • 同理,當(dāng)遍歷到"../../../C.uasset"時,公共路徑變?yōu)?#34;../../../"
  • 此時所有文件處理完畢,MountPoint就是"../../../",會被寫入pak文件中
  • 2.FPackageName::RegisterMountPoint

    根據(jù)上面的算法,不同project的pak,uasset的路徑都會帶上"MyProject/Content/"和"MyProject2/Content/"這樣的路徑。

    加載的時候,需要增加一個全局的MountPoint來替換這個加載路徑

    3.獲取生成pak的Project Name

    ?根據(jù)pak的生成規(guī)則,需要獲取到pak工程對應(yīng)的Project Name

    這里使用"/Mod/"來作為pak的RootPath.

    4.加載pak并設(shè)置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);//設(shè)置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")));}}

    ?

    ?

    ?

    總結(jié)

    以上是生活随笔為你收集整理的ue4挂载其他工程生成的pak,打开level的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網(wǎng)站內(nèi)容還不錯,歡迎將生活随笔推薦給好友。