Some good news!
May not apply to all cases, but apparently it’s like a form of BP corruption for the child class that won’t save the properties.
The good news part is that I duplicated the BP child class that wouldn’t save and it just worked. When I close and start up the editor, the property changes from the parent class were saved just fine. I made sure that the values were non-default in the parent as well.
Some additional context for my project is that it has been gradually migrated to UE5.3 from originally 4.27, just mentioning in case it has anything to do with that.
Unfortunate that the corruption happens, but this works for me for now.
Edit:
Scratch that, it’s really odd. It works up until the moment when I delete the original child class and replace references with the duplicate. Then the duplicate breaks.
So I guess it’d have something to do with the assets that reference it, which seems really odd to me indeed.
Edit Again
Just by having a Cast present with its execution pin connected in my player controller class is causing the issue.
To clarify structure in case it’s important:
The child bp with the issue is a child player character of my main character class. I’m using VR Expansion Plugin, so it’s the NonVR character.
By simply having a Cast to the child bp from the player controller, a child actor component on my child bp refuses to take its saved values properly.
If the cast is not present, my saved values load properly in the child BP, even without me reverting the values and resaving the child BP.
I don’t really know the lifecycle of the Player Controller while the editor is running, but I’d venture to guess that since the Cast keeps the child BP loaded in memory, it’s somehow interfering with the child BP’s ability to load some inherited values from its parent.
In my case, it’s happening on a Child Actor Component. More than that, the values that won’t load properly are those that are on a component of the Child Actor Template.
Any values modified to not match the child BP’s parent will load properly.
However, any values that do match the parent will not load properly if the parent’s values have been modified from the defaults for the component in the template. The component default values are used instead in that case.
Unfortunately, I haven’t been able to repro in a blank project. I’m thinking there’s some sort of reference chain that causes this.
It seems related to class references and Cast nodes, as all variables below my Class reference on the child actor template get broken if I put a class in the reference that includes a plugged in Cast node for the parent of the erring child class.
I think for now I’m just going to follow the rule of thumb to not Cast in the Player Controller, since it’s pretty likely to cause circular references as a commonly referred to class.