Description

In certain circumstances, when a derived blueprint is compiled, all properties from its inherited components can be silently reset to defaults on instances placed on the current level. This results in loss of data and time for the user. This behavior has been consistently reproduced in UE 5.4.3, but does not seem to happen in UE 5.1 to 5.3.

Consider the following setup:

  • an actor blueprint to which a scene component was been added in the Editor
  • another actor blueprint derived from it, inheriting that scene component without any changes
  • an instance of that derived blueprint placed on the current level
  • on that instance, some properties of the inherited component are changed

In that situation, when the derived blueprint is recompiled, all of the properties of the inherited component on the instance placed in the level are silently reset to defaults.

 

Steps to Reproduce
  • Create a blueprint "BP_Base" derived from "Actor"
  • Right-Click on the created blueprint and select "Create Child Blueprint Class" as "BP_Derived"
  • Open the parent blueprint "BP_Base"
  • Add a scene component "MyScene" to "BP_Base"
  • Compile and save
  • Place BP_Derived into the viewport
  • With BP_Derived selected in the outliner, navigate to the details panel and reset its transform via the arrow button 
  • Within the details panel, select the scene component we created
  • Change the scene component's  Y location to -50
  • Within the content drawer, open BP_Derived blueprint
  • Within Class Defaults, change "Only Relevant to Owner" to true
  • Compile and save
  • Back within the viewport, select the BP_Derived's scene component
  • Notice that the Y location remains at -50
  • Back within BP_Derived's blueprint, set "Only Relevant to Owner" to false
  • Compile and save
  • Back within the viewport, select the BP_Derived's scene component

Result: 

The scene component's Y location has been set to 0

  • Note: The behavior has been more consistently reproduced when compiling the derived blueprint twice (no need to make any changes between those two recompilations)
  • Note: Verified in 5.4.3. Works correctly on 5.1, 5.2 and 5.3.

 

Alternate Repro:

  1. Create a blueprint "BP_Base" derived from "Actor"
  2. Open in the editor and add a scene component "MyScene" to "BP_Base"
  3. Right-Click on the created blueprint and select "Create Child Blueprint Class" as "BP_Derived"
  4. Open in the editor and add a scene component "MySceneDerived" to "BP_Derived". This actor will now have three scene components
  5. Place an instance of BP_Derived in a level, and select the actor
  6. Click MyScene in the component list of the selected actor, and click Hidden in Game to change it to true
  7. Click MySceneDerived in the component list and also click Hidden in Game to set it to true
  8. Go to BP_Derived in the blueprint editor, click the Compile button to manually compile
  9. Select the actor in the level editor again and click on MyScene. Note that the value of Hidden in Game is now false as it was incorrectly reset
  10. The value of Hidden in Game on MySceneDerived will be correct. Also, if you compile BP_Base instead of the derived actor, it does not reset the values

Have Comments or More Details?

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

5
Login to Vote

Fixed
ComponentUE - Gameplay
Affects Versions5.45.4.3
Target Fix5.5
Fix Commit36088801
CreatedJul 19, 2024
ResolvedSep 6, 2024
UpdatedSep 11, 2024
View Jira Issue