Quick answer: Verify the Level Instance’s World Asset reference is valid and cooked, enable “Is Initially Loaded” if you need it at startup, and ensure World Partition streaming sources can reach the instance’s cell. For data layers, confirm the layer is active at runtime.
Here is how to fix Unreal Level Instance not loading. You place a LevelInstance actor in your World Partition map to embed a building interior. In the editor, you can edit the instance contents in place. At runtime, the player walks to the building and finds an empty shell — the LevelInstance content never streams in. The actor exists, but its referenced level content is absent.
The Symptom
A LevelInstance actor is placed in the world and visible in the editor outliner. Its contents (meshes, lights, actors) appear when editing. At runtime or in PIE, the instance location is empty. The LevelInstance actor itself exists (you can query it), but its sub-level content is not loaded.
What Causes This
World Asset soft reference not resolved. The LevelInstance stores a TSoftObjectPtr<UWorld> as its asset reference. If the referenced level was moved, renamed, or is not included in the packaging settings, the soft reference resolves to null at runtime.
World Partition streaming not reaching the cell. In World Partition maps, content loads based on streaming sources (typically the player camera). If the LevelInstance is placed far from any streaming source, its cells are not loaded. The instance needs to be within a loaded streaming cell.
Data Layer not active. If the LevelInstance’s actors are assigned to a data layer, that layer must be activated at runtime. Inactive layers remain unloaded regardless of proximity.
Is Initially Loaded is false. By default, LevelInstance actors may not be initially loaded. They wait for streaming conditions. If your game expects the content at startup (menu screens, spawn areas), it must be flagged as initially loaded.
Level not included in cook. The referenced level asset must be in the cook manifest. If it is only referenced via soft pointer and not hard-referenced anywhere, the cooker may exclude it from packaged builds.
The Fix
Step 1: Verify the World Asset reference.
// In Blueprint or C++, check if the instance has a valid world:
ALevelInstance* LI = Cast<ALevelInstance>(FoundActor);
if (LI)
{
TSoftObjectPtr<UWorld> WorldAsset = LI->GetWorldAsset();
if (WorldAsset.IsNull())
{
UE_LOG(LogTemp, Error, TEXT("LevelInstance world asset is null!"));
}
else
{
UE_LOG(LogTemp, Log, TEXT("World: %s"), *WorldAsset.ToString());
}
}
If the asset path is invalid or the asset was deleted, reassign it in the LevelInstance’s details panel.
Step 2: Enable Is Initially Loaded. Select the LevelInstance actor in the outliner. In the Details panel:
// LevelInstance Details:
// Level Instance > World Asset: /Game/Levels/Building_Interior
// Level Instance > Is Initially Loaded: true <-- Enable this
// Level Instance > Is Initially Visible: true
With Is Initially Loaded enabled, the instance content loads when the persistent level loads, bypassing streaming proximity requirements.
Step 3: Configure streaming sources for World Partition. If you want streaming-based loading (not always loaded), ensure a streaming source covers the area:
// Add a WorldPartitionStreamingSource component to your PlayerController
// or place a WorldPartitionStreamingSourceActor near the LevelInstance
UPROPERTY(VisibleAnywhere)
UWorldPartitionStreamingSourceComponent* StreamingSource;
// Configure radius to cover the level instance area:
StreamingSource->StreamingSourceRadius = 5000.0f;
StreamingSource->bStreamingSourceEnabled = true;
The streaming source radius must encompass the LevelInstance’s world position for its cells to load.
Step 4: Activate data layers at runtime.
// Activate a data layer that contains LevelInstance content:
UDataLayerManager* DLManager = GetWorld()->GetDataLayerManager();
if (DLManager)
{
UDataLayerInstance* Layer = DLManager->GetDataLayerInstanceFromName(
FName("BuildingInteriors"));
if (Layer)
{
DLManager->SetDataLayerInstanceRuntimeState(
Layer, EDataLayerRuntimeState::Activated);
}
}
Step 5: Include the level in packaging. Add the level to Additional Asset Directories to Cook or reference it from a primary asset:
// In DefaultGame.ini:
[/Script/UnrealEd.ProjectPackagingSettings]
+DirectoriesToAlwaysCook=(Path="/Game/Levels/Instances")
“LevelInstance is a World Partition citizen. It follows streaming rules, data layer rules, and cook rules. Meet all three for content to appear at runtime.”
Related Issues
For procedural content that also needs collision at runtime, see Procedural Mesh Missing Collision. For audio issues in packaged builds, see MetaSound Not Playing in Packaged Build.
Valid asset reference, Is Initially Loaded, streaming source range, active data layer. Instance loads.