How to load a map from a pak runtime

Hi all

I was reading this Example Project: Loading Pak Files At Runtime | Tutorial

and got inspired to something with it. Currently I have a way to load the pak file exactly how it was in the tutorial (using the example plugin). Was able to succesfully load the Actors but I want to load map now.

After mounting pak and getting the map I use Open Level but it always crashes.

Anyone know why? or anyone knows a workaround to load pak on runtime and load another map?

log crahses:

[2025.04.23-13.51.03:239][280]LogBlueprintUserMessages: [BP_ProtoLoadLevelFromPak_C_UAID_A8A159075DEEAA6102_1675594847] Mount OK
[2025.04.23-13.51.03:241][280]LogBlueprintUserMessages: [BP_ProtoLoadLevelFromPak_C_UAID_A8A159075DEEAA6102_1675594847] Map found: Scans/RHK/Map1.umap
[2025.04.23-13.51.03:241][280]LogLevel: Warning: Failed to find streaming level object associated with 'Map1'

thanks in advance!

Are you trying to use level streaming with a dynamically injected pak ?

Try doing this before loading level :

ULevelStreamingDynamic* StreamingLevel = NewObject<ULevelStreamingDynamic>(GetWorld(), NAME_None, RF_Transient, nullptr);

StreamingLevel->SetShouldBeLoaded(true);
StreamingLevel->SetShouldBeVisible(true);
StreamingLevel->bShouldBlockOnLoad = false;
StreamingLevel->bInitiallyLoaded = true;
StreamingLevel->bInitiallyVisible = true;
StreamingLevel->LevelTransform = FTransform(0,0,0);

// PackageNameToLoad = "/Game/Scans/RHK/Map1"
StreamingLevel->PackageNameToLoad = FName(*PackageNameToLoad);
StreamingLevel->SetWorldAssetByPackageName(StreamingLevel->PackageNameToLoad);

GetWorld()->AddStreamingLevel(StreamingLevel);

Hi @Chatouille thanks for the quick reply! Much appreciated

Sorry that log was from previous try. I actually want to use Open Level

but both also seems to not work

[2025.04.23-16.20.37:785][222]LogBlueprintUserMessages: [BP_ProtoLoadLevelFromPak_C_UAID_A8A159075DEEAA6102_1675594847] Mount OK
[2025.04.23-16.20.37:787][222]LogBlueprintUserMessages: [BP_ProtoLoadLevelFromPak_C_UAID_A8A159075DEEAA6102_1675594847] Map found: Scans/RHK/Map1.umap
[2025.04.23-16.20.37:788][222]LogLongPackageNames: Warning: Can't Find URL: Map1: . Invalidating and reverting to Default URL.

I have been using different paths as well but still not good:

  • Game/Scans/RHK/Map1
  • Scans/RHK/Map1
  • Map1 (seen above)

My logic is that since I can do this within the same game (seen below)

I should be able to do it as well by dynamicall injecting pak with a map.
Below is the edited version of the blueprint gotten from the tutorial mentioned above about runtime pak.


I am able to do it with blueprint like the tutorial but could not find a solution for loading maps

OpenLevel relies on AssetRegistry to convert simple map names into full paths.

Runtime pak loader sample project does not update asset registry with loaded pak contents, so the engine builtin search/discovering functions will not work. Only the project utilities such as GetPakContent will let you discover assets in pak.

Providing a full path to the map should do the job though. Full paths always start with a leading slash, you almost had it, should be /Game/Scans/RHK/Map1

More generally, the path would be the pak root path (generally /Game/)+ the path of asset in pak (in this case Scans/RHK/Map1). Project utility Conv_PakContentPathToReferenceString should do the job if you pass /Game/ as the second parameter.

Thanks for the reply and info I will keep in mind regarding the name

I changed the input and
It does something… however it still wont load and crashes

[2025.04.24-17.09.10:002][169]LogBlueprintUserMessages: [BP_ProtoLoadLevelFromPak_C_UAID_A8A159075DEEAA6102_1675594847] Mount OK
[2025.04.24-17.09.10:005][169]LogBlueprintUserMessages: [BP_ProtoLoadLevelFromPak_C_UAID_A8A159075DEEAA6102_1675594847] Map found: Scans/RHK/Map1.umap
[2025.04.24-17.09.10:005][169]LogLevel: Warning: WARNING: The map '/Game/Scans/RHK/Map1' does not exist.
[2025.04.24-17.09.10:012][170]LogGlobalStatus: UEngine::Browse Started Browse: "/Game/Scans/RHK/Map1"
[2025.04.24-17.09.10:012][170]LogNet: Browse: /Game/Scans/RHK/Map1
[2025.04.24-17.09.10:012][170]LogLoad: LoadMap: /Game/Scans/RHK/Map1
[2025.04.24-17.09.10:012][170]LogWorld: BeginTearingDown for /Game/FirstPerson/Maps/FirstPersonMap
[2025.04.24-17.09.10:013][170]LogOutputDevice: Warning: 

Script Stack (0 frames) :

I changed the name as you said and it shows that it now loads (although initially it could not find)
This was not available from previous logs!
but it failed loading it and fallback to the First person map… and crashed

in our context of discussion i checked again if paks are mounted correctly but they are

[2025.04.24-17.08.50:008][ 71]LogPakFile: Display: Mounted Pak file 'C:\Users\salman\Documents\PackagedProjects\pakchunk200-Windows.pak', mount point: '../../../Photogrammetry/Content/Scans/RHK/'
[2025.04.24-17.08.50:009][ 71]LogPakFile: Display: Mount point '../../../Photogrammetry/Content/Scans/RHK/' is not mounted to a valid Root Path yet, assets in this pak file may not be accessible until a corresponding UFS Mount Point is added through FPackageName::RegisterMountPoint.
[2025.04.24-17.08.50:009][ 71]LogPackageName: FPackageName: Mount point added: '../../../Photogrammetry/Content/' mounted to '/Game/'
[2025.04.24-17.08.50:249][ 98]LogContentStreaming: Warning: [T_FPGun_M] Texture stream in request failed due to IO error (Mip 2-2).
[2025.04.24-17.08.50:249][ 98]LogContentStreaming: Warning: [T_FPGun_N] Texture stream in request failed due to IO error (Mip 4-4).
[2025.04.24-17.08.50:369][112]LogContentStreaming: Warning: [T_FPGun_N] Texture stream in request failed due to IO error (Mip 4-4).
[2025.04.24-17.08.50:369][112]LogContentStreaming: Warning: [T_FPGun_M] Texture stream in request failed due to IO error (Mip 2-2).
[2025.04.24-17.08.50:490][126]LogContentStreaming: Warning: [T_FPGun_M] Texture stream in request failed due to IO error (Mip 2-2).
[2025.04.24-17.08.50:490][126]LogContentStreaming: Warning: [T_FPGun_N] Texture stream in request failed due to IO error (Mip 4-4).
[2025.04.24-17.08.50:613][140]LogContentStreaming: Warning: [T_FPGun_M] Texture stream in request failed due to IO error (Mip 2-2).
[2025.04.24-17.08.50:613][140]LogContentStreaming: Warning: [T_FPGun_N] Texture stream in request failed due to IO error (Mip 4-4).
[2025.04.24-17.08.50:746][154]LogContentStreaming: Warning: [T_FPGun_M] Texture stream in request failed due to IO error (Mip 2-2).
[2025.04.24-17.08.50:746][154]LogContentStreaming: Warning: [T_FPGun_N] Texture stream in request failed due to IO error (Mip 4-4).
[2025.04.24-17.08.50:755][156]LogPakFile: Display: Mounted Pak file 'C:\Users\salman\Documents\PackagedProjects\pakchunk200-Windows.pak', mount point: '../../../Photogrammetry/Content/Scans/RHK/'
[2025.04.24-17.08.50:755][156]LogPackageName: FPackageName: Mount point added: '../../../Photogrammetry/Content/' mounted to '/Game/'

pakchunk200 is pak that contains the map. I feel like i am forgetting something but still no catch. It does Load but it just wont load

Nope it still doesn’t find the map package.

It logs something different because it detects a full path and goes through a different branch of code.

Can you go back to where it worked (loading actors), and print the full path of actors/classes after loading them from the pak ? This might help figuring out what’s wrong.
Also, can you post a dump of the pak contents with UnrealPak ?


edit: Also noticed something, as per this message

'../../../Photogrammetry/Content/Scans/RHK/' is not mounted to a valid Root Path yet

The /Game/ root path should already point to your main project’s content. Does that mean your main project is not called Photogrammetry? If you are trying to mount /Game/ to two different paths you are going to run into issues, one of either will be unreachable.

Hi @Chatouille thanks again for the reply!

So you are right yes i am loading from a pak created from another project. I was able to do this with BP of an actor like the tutorial showed and i tested it on loading a static mesh asset… attached is a log file that shows I was able to mount an static mesh called MJ_52_RC_Model_2_0000001 and load it from another pak created in the project called photogrammetry… sort of only the asset and no texture

yes the map was also created in the Photogrammetry project as my logic was if i could load an asset I could also load a map… hence i posted to this thread

BUT today i took a different approach and created a map and made a pak of it from the current game im testing. and voila it works like you mentioned. I was able to load the map. I ensured it load from the pak as i packaged another version without the map and tested loading externally from pak!
TestCPP.log (181.9 KB)

so i guess there is a limit on what you can load from a pak created from another game! only BP and static asset (although not fully)