When an actor is moved on the level editor viewport, it is reconstructed along with its components, which at first makes their properties reset to their default state. Thankfully, this does not happen because properties are saved before the movement and restored afterwards. The problem is that, depending on the property flags/specifiers (like VisibleAnywhere, BlueprintReadWrite, or InstanceEditable), in some cases its value is not restored properly, which in the user's point-of-view means an unexpected and undesired reset of the property value. This happens for:
These unexpected property resets are perceived by engine users as a bug (especially since today so many things can be changed by in-editor-callable functions, including tick). They might be motivated by some concern about the interaction between these property restorations and the rerun of construction scripts (for example to recreate a MaterialInstanceDynamic or rebuild a SplineMeshComponent), but even if that is the case, it does not seem to be appropriate to tie the restoration to a visibility and/or editability flag. In the current state, not only the behavior is inconsistent between actors and components, but it is also forcing engine users to make properties visible/editable for the sole purpose of making them persist better, even when they would rather have the properties hidden. If a non-persisting property is really needed, maybe the reset should depend on another flag instead ("transient" or another one)?
I've got another JIRA report related to case https://udn.unrealengine.com/s/case/5004z00001sjBPIAA2/properties-without-any-specifiers-are-not-serialized-when-component-are-recreated-in-editor
Repro Project: [Link Removed]
On the repro project, there is a test actor instance which has properties from a variety of sources (C++/BP, Actor/Component) and with a variety of flags/specifiers. All these properties start as false on construction, which can be attested by a "print" button on the details panel. They can then be all set to true with another button. Finally, after moving the actor on the viewport and printing the property values again, we can see that some of them were unexpectedly reset. Using the "diag" button, we can see exactly which properties were affected.
Steps:
There's no existing public thread on this issue, so head over to Questions & Answers just mention UE-196448 in the post.
2 |
Component | UE - Gameplay - Blueprint |
---|---|
Affects Versions | 5.3 |
Target Fix | 5.6 |
Created | Sep 25, 2023 |
---|---|
Updated | Sep 30, 2024 |