Description

When a world partition level (but streaming disabled) is placed as a LevelInstance in another world partition level, actors in the inner level are cooked with an outdated component hierarchy until the inner level is resaved.

Consider a Persistent World-Partition Level containing an Instanced World-Partition Level. Both have "streaming" disabled in the world settings, and both contain an instance of a simple BP Actor containing a Cube. Now, while the Persistent Level is open, if we add another mesh to the BP actor class (for example a Cone over the Cube), that change is correctly visualized in the Level Editor on both instances of the actor.

However, if we package the project at that point, the resulting executable will not show the added Cone on the actor belonging to the Instanced Level. But the bug can be reproduced directly in the attached repro project provided by a UDN user, or by following the steps below.

Steps to Reproduce

Blank Project Repro

  • Create a new Blueprint Actor BP_MyActor
  • Add a static mesh component to it, such as a cube.
  • Save and close
  • Create a new Open World Level (File – New Level – Empty Open World)
  • Disable streaming in World Settings --World Partition Setup
  • Place an instance of the Blueprint Actor at the origin
  • Save it as map MAP_InnerLevel
    **
  • Create a new non-empty Open World Level (File – New Level – Open World)
  • Disable streaming in World Settings --World Partition Setup
  • In the viewport navigate to the PlayerStart (or start+stop PIE once to do the same)
  • Place an instance of BP_MyActor by dragging it from the content browser
  • Place a Level Instance of MAP_InnerLevel by dragging it from the content browser
  • Save it as map MAP_OuterLevel

At this point, MAP_OuterLevel should contain two instances of BP_MyActor. One directly and one via the level instance. It should appear as two cubes.

  • Edit BP_MyActor visually, for example place a sphere mesh above the cube
  • Save BP_MyActor 
  • At this point, in PIE, both actors should have the cube and sphere visible
  • Change the Game Default level in the Project Settings to MAP_OuterLevel
  • Package the project and run the executable.

--> The actor on the persistent level will show both meshes (cube and sphere). The one on the instanced level will not show the last added component (no sphere).

Repro Project

  • Download TestLevelInstanceV2.zip from [Link Removed]
  • Open the project. The project includes a BP actor containing a couple of Static Mesh Components, one Persistent World-Partition Level, and within it some Instanced World-Partition levels, all of which contain an instance of the BP actor.
  • Enter PIE and note that every actor shows with both a cube and a cone.
  • Package and run the project, note that one of the actors does not show the cone.
  • Check the text on the ground near each actor instance for how they were authored.
  • Optionally, return to the editor, add another Static Mesh Component to the actor, and repackage the project. When running, only the instance within the Persistent Level will show the new component, all the others won't.

Have Comments or More Details?

There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-213566 in the post.

6
Login to Vote

Unresolved
ComponentUE - Gameplay - Blueprint
Affects Versions5.3.2
Target Fix5.5
CreatedApr 29, 2024
UpdatedMay 10, 2024