Context
The LevelStreamingPersistence plugin can be used to remember and restore properties on actors and components that are part of a streamed level.
Blueprint variables can be marked as instance editable, meaning they can be modified by level designers on the map. If they aren’t instance editable, actor reconstruction logic assumes that they should be their default value.
Problem
When you use the persistence plugin to mark a blueprint variable as persisted, the persistence will silently fail in PIE. Restoring properties is applied in OnLevelBeginMakingInvisible, but during PIE actor construction scripts are rerun during IncrementalUpdateComponents, which happens after. Non-instance editable BP variables are reset to their default value.
Suggested Fix
Detect when a persisted variable is a blueprint variable and not instance editable. Then warn the user, via FMessageDialog, that it should be made instance editable. This could be detected:
In the attached repro project:
Blank project setup steps:
[/Script/LevelStreamingPersistence.LevelStreamingPersistenceSettings] +Properties=(Path="/Game/Blueprints/BP_MyActor.BP_MyActor_C:TimeAlive", bIsPublic=true)
Repro steps:
Non-fatal callstack. This is the callstack that stomps the restored persisted value in PIE when the BP variable is not marked instance editable:
> UnrealEditor-Engine.dll!AActor::ResetPropertiesForConstruction() Line 110 C++ UnrealEditor-Engine.dll!AActor::RerunConstructionScripts() Line 589 C++ UnrealEditor-Engine.dll!ULevel::IncrementalRunConstructionScripts(bool bProcessAllActors) Line 2078 C++ UnrealEditor-Engine.dll!ULevel::IncrementalUpdateComponents(int NumComponentsToUpdate, bool bRerunConstructionScripts, FRegisterComponentContext * InContext) Line 1891 C++ UnrealEditor-Engine.dll!UWorld::AddToWorld(ULevel * Level, const UE::Math::TTransform<double> & LevelTransform, bool bConsiderTimeLimit, const TOptional<UE::FTimeout const> & ExternalTimeout, FNetLevelVisibilityTransactionId TransactionId, ULevelStreaming * InOwningLevelStreaming) Line 3792 C++ UnrealEditor-Engine.dll!ULevelStreaming::UpdateStreamingState(bool & bOutUpdateAgain, bool & bOutRedetermineTarget, const TOptional<UE::FTimeout const> & InExternalTimeout) Line 1059 C++ [Inline Frame] UnrealEditor-Engine.dll!FStreamingLevelPrivateAccessor::UpdateStreamingState(ULevelStreaming *) Line 808 C++ UnrealEditor-Engine.dll!UWorld::UpdateLevelStreaming(const TOptional<UE::FTimeout const> & ExternalTimeout) Line 5045 C++
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-368855 in the post.
| 0 |
| Component | UE - World Creation - Worldbuilding Tools |
|---|---|
| Affects Versions | 5.3, 5.4, 5.5, 5.6, 5.7 |
| Target Fix | 5.8 |
| Fix Commit | 52347206 |
|---|
| Created | Mar 6, 2026 |
|---|---|
| Resolved | Apr 1, 2026 |
| Updated | May 29, 2026 |