天天看點

UE4中動态建立并加載流關卡

在運作時将指定的.umap關卡檔案以流關卡形式加載并顯示出來,主要實作代碼如下

UE4中動态建立并加載流關卡

關卡在Content中的路徑 為 Content/TempUmap/Level_01

那麼生成的PackageName就應為  Game/TempUmap/Level_01

把以下代碼添加到Actor子類中。将Actor添加到關卡中生效

// 擷取永久性關卡
UWorld* PersistentWorld = GetWorld();

if (!PersistentWorld)
{
	UE_LOG(LogTemp, Fatal, TEXT("UDynamicLevels::LoadTileToStreamingArray >> Invalid PersistentWorld!!!"));
	return;
}

//new StreamingClass Instance 新流關卡執行個體
UClass* StreamingClass = ULevelStreamingKismet::StaticClass();
ULevelStreaming* StreamingLevel = Cast<ULevelStreaming>(StaticConstructObject(StreamingClass, PersistentWorld, NAME_None, RF_Transient, NULL));

// FName PackageName = TEXT("/Game/TempUmap/Level_01") 根據項目實際情況擷取并設定PackageName
StreamingLevel->SetWorldAssetByPackageName(PackageName);

//Make New Level Visible 使流關卡可見
StreamingLevel->bShouldBeLoaded = true;
StreamingLevel->bShouldBeVisible = true;
StreamingLevel->bShouldBlockOnLoad = false;

//Very Important, used by LevelStreaming* to load the map 設定流關卡的包名
StreamingLevel->PackageNameToLoad = PackageName;
//Add to UWorld 将流關卡添加到World中
PersistentWorld->StreamingLevels.Add(StreamingLevel);
           

參考:https://answers.unrealengine.com/questions/39875/levels-loaded-from-umap-file-name-during-runtime-f.html

繼續添UE4的坑。。。。

繼續閱讀