Quick answer: Each actor must exist in exactly one .umap. Persistent global actors (GameMode, PlayerStart, audio managers) belong in the persistent level. Per-region geometry belongs in its sublevel. Use the Levels panel to move misplaced actors with right-click → Move to Level.

You stream a sublevel in. The collision volumes work; the player walks the level fine. Then you stream a second sublevel and ten props are now floating doubles of the first level’s props. They were duplicated by being saved into both .umaps.

The Symptom

Visible duplicate actors after streaming. Sometimes the duplicates have collision and the player can’t pass certain points; sometimes they’re visual-only. Names are identical or have suffix _1, _2.

What Causes This

Each .umap file is a separate level asset. When two levels both contain the same actor (because someone copy-pasted between them or the actor was created while the wrong level was active), streaming both at once produces both copies.

The Persistent Level is the always-loaded base. Sublevels stream in/out. An actor must live in exactly one of these levels, not multiple.

The Fix

Step 1: Open the Levels window. Window → Levels. Set the Current Level explicitly. The status bar shows which level you’re editing.

Step 2: Select duplicated actors. Use the World Outliner. Tick the “Show Owning Level” column. Sort by Name; duplicates are visible side by side with different owning levels.

Step 3: Move to one level only. Right-click the duplicate → Level → Move Actor to Current Level (or specifically “Move to Level → PersistentLevel”).

Pick the rule:

Persistent Level:    GameMode pieces, PlayerStart, audio listener,
                     skylight, day/night driver, persistent UI host
Each Sublevel:       its own static geometry, lights baked for
                     that sublevel, gameplay triggers specific to
                     that region

Step 4: Save both levels. Save the source and destination .umap files. Without saving, the move only exists in memory.

World Composition / World Partition

UE5 World Partition handles much of this automatically with cell-based ownership. UE4 World Composition uses Level Bound to determine which actors are “in” a level. Set Level Bounds Actor on each sublevel to define which actors are claimed; actors outside the bounds are warnings on save.

Stream Distance Volume Caveats

Stream Distance Volumes use bounds to decide whether a sublevel is loaded. If two sublevels overlap and both contain the same actor, both stream in within the overlap area and you see the duplicate again. Make sure level bounds are mutually exclusive.

Verifying

Console: showflag.LevelStreamingVisualizer 1 or just visualize streaming volumes. Walk through transitions. No duplicates should appear at any boundary. If they do, find the offending actor in two .umaps.

“Each actor in one level. Persistent for globals. Sublevel for region. Duplicates disappear.”

Related Issues

For foliage streaming issues, see foliage streaming. For static actor missing, see streaming missing.

One actor, one level. Move with the Levels window.