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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 综合教程 >内容正文

综合教程

UE4 生成多个Pak

發布時間:2023/12/19 综合教程 29 生活家
生活随笔 收集整理的這篇文章主要介紹了 UE4 生成多个Pak 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

UE4默認情況下打包生成一個Pak,這對于小型游戲足夠了,但對于大型游戲不太方便,
單個pak文件太大對于打補丁非常不友好(非UE4默認Patch方案, 而是Xdelta3/BSDiff類方案),
UE4內置了拆分Pak的功能,是按照資源類型來劃分, 感覺不太直觀, 習慣上更期望安裝目錄劃分pak,
要實現安裝目錄劃分,最簡單的辦法就是修改AutomationTool,在執行打包pak時,讀取自定義配置,
根據文件目錄個配置項,拆分為多個pak. 這在源碼版引擎上操作很友好,但在安裝版引擎就不方便了,
每次引擎更新都會覆蓋對應的cs文件,反復修改很煩.
故嘗試通過其自帶拆分pak的功能來實現安裝目錄分pak, 發現其代碼中預留了自定義操作,
只需要繼承AssetManager,復寫GetPackageChunkIds() 函數, 根據自定義配置來決定資源所屬pak即可.
注意:要將項目的AssetManager設置為自定義的AssetManager類方可生效.

代碼中讀取ini應該可以優化,不必每次重新讀取(只是需要額外處理刷新ini的時機)



bool UMyGameAssetManager::GetPackageChunkIds(FName PackageName, const class ITargetPlatform* TargetPlatform, const TArray<int32>& ExistingChunkList, TArray<int32>& OutChunkList, TArray<int32>* OutOverrideChunkList /*= nullptr*/) const
{
	TArray<FString> Lines;
	GConfig->GetSection(TEXT("MultiPaks"), Lines, GGameIni);
	int32 Idx = 0;
	for (auto It : Lines)
	{
		++Idx;
		TArray<FString> KVStr;
		It.ParseIntoArray(KVStr, TEXT("="));
		if (KVStr.Num() == 2 && PackageName.ToString().StartsWith(KVStr[1]))
		{
			OutChunkList.Add(Idx);
			return true;
		}
	}
	OutChunkList.Add(0);
	return true;
}

配置項:
DefaultGame.ini


[/Script/UnrealEd.ProjectPackagingSettings]
bGenerateChunks=True


[MultiPaks]
+Pak0="/Game/Startup/"
+Pak1="/Game/GameUI/"
+Pak2="/Game/Blueprint/"
+Pak3="/Game/Maps/"


DefaultEngine.ini


[/Script/Engine.Engine]
AssetManagerClassName=/Script/MyGame.MyGamaeAssetManager

總結

以上是生活随笔為你收集整理的UE4 生成多个Pak的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。