Defaults resetting on BPs derived from other BPs

[ This is a repost from my forum post: Strange issue: defaults resetting on BPs derived from other BPs - Blueprint - Epic Developer Community Forums ]

Just throwing this out here to see if anyone else has encountered this, and maybe knows of a way to fix it.

In my current project, I have a base class (in BP) for throwable objects, i.e. anything that the player can, well, throw. The base class is of course never instanced, but used to handle all the general stuff that applies to any specific throwable, which are individual BP classes using the base as parent.

This was working as expected until yesterday, when the default values for variables defined in the base class suddenly started going back to ‘0.0’ or ‘None’ or whatever’s the appropriate basic default for each data type, even though they had specific non-zero values set in the base class.

The strangest thing is that everything seems to work fine while fiddling with this in a single UEeditor session, but if I save everything, quit the editor, and then load it back up, then all the derived classes will have their defaults zeroed out again.

It appears as if this doesn’t happen until you derive more than one child from a common parent BP, but I have not yet had time to verify this in a clean project.

I’ve tried reparenting and then going back to the intended base class again to see if that would refresh things a bit (and it does, but resets again when the editor is closed/reopened). I’ve tried making all the defaults private in the base class, and adding setters/getters where needed. All sorts of strange things, but nothing has helped.

To work around this, today I ended up setting all values explicitly in the construction script for each child BP, which does indeed work reliably, but it’s hardly an ideal solution going forward.

So… has anyone seen this? Did you find a solution?

Oh, and this applies to 4.6.0.

Hey -

Just to confirm, it is the default value in the parent getting reset, correct? Or are the values of variables from the parent showing as default inside the child? Is there any instance where the parent’s default value is being overridden by a default of the child?

Cheers

A specific example:

  • BaseClass_BP::SomeFloat → default value set to 200 (and stays there)

  • Derived_BP::Inherited SomeFloat → keeps going back to 0.0 when editor/project is reloaded.

The child does not seem capable of changing the base’s default values, if that’s what you mean. Only the child(ren) show up with all their defaults reset, while the parent maintains correct values. The children even “know” that they have deviated, because all the defaults show up with that little reset arrow, and when clicking it, it does go back to the correct value as set in the base. But then it goes back again when closing/reloading editor/project.

Hey -

I was not able to reproduce your issue exactly however during testing I did notice that default values for transform variables were not getting set in the child BP properly. I have submitted this bug to our internal tracking system (UE-6447) for further investigation. Best of luck in your current and future projects.

Cheers

I’d like to add that I’ve been facing this for some time.

It’s not only on float values. I’m getting this for skeletal mesh / animation value
right now. No matter how many times i set the value the editor would restart it with ‘None’ . This is causing the game to be unable to launch in standalone.

Hey -

I am still unable to reproduce this on the latest version of the engine. I created two blueprints, one based on actor (Parent) and the other based on the first (Child). After creating a skeletal mesh variable in Parent and setting it to the ThirdPersonSkelMesh asset I saved and closed the editor. Upon reopening the project both the parent and child showed the skeletal mesh set in their defaults. Which version of the engine are you using and what class did you set as the parent to the “base” class?

This is solved as of 4.7.3 it seems, related to: Variables get zeroed out in child blueprints - Editor Scripting - Unreal Engine Forums

I am getting the same problem as above with Child Blueprints.

I have a main actor class that has a child. Even though the IsEquiped boolean is set to replicate in the parent class, it is set to none in the child. When I set it to Replicate in the child it works until I reload the editor.

Hey Zeetu-

I believe this was first reported because the variable values themselves (in this case the true/false of the boolean) was not being saved between the parent/child properly. Your issue with the replication setting of the variable is slightly different however I have entered a bug report about the child setting being reset (UE-18857). It seems to be an issue with the parent being updated because the same thing happens if the parent blueprint is edited and compiled.

Is there a workaround currently? I’m try to debate removing my inheritance and moving code to actor components or waiting for a fix/workaround.

The best way to work around that for now would be to make any functionality that the child needs from the parent as a function in the parent. Then the child can be made as its own class rather than as a child and cast to the parent to call the needed functions. This will allow the child to set its own replication while still being able to get information from the parent.

EDIT:
Additional testing shows that even though the variable is listed at not replicating in the details panel of the Child blueprint it is still following the parent’s replication setting. So if the parent is set to replicate then the child will replicate as well.

Hey , is there any update about UE-18857? Will it be fixed in 4.10?

Hey ,

The child’s replication showing as “none” is expected. “We no longer allow the change of the replicated setting in the child blueprint. You still see the value as “none”.”

This is still happening in 4.12.

I still have this error in 4.14. If I inherit Editable Variables from Parent. They always return to their status as the default has been described here: [Bug w/ProjectFiles] Default Value of blueprint reset to parent's default - Blueprint - Unreal Engine Forums

Can confirm this is still very alive in 4.14 as well. It seems there is no true way to edit a parents default class default object from the child. The only way i receive the edits from the child is to hit the little yellow revert arrow in editor for everything i changed which is not ideal.

EDIT: Same Issue Found Here When using FKismetEditorUtilities::CreateBlueprint, Parent class default object and its variables are not what i set it to be, what am i doing wrong? - Plugins - Epic Developer Community Forums

I am having exactly the same issue in 4.16.0: I have one base Character-based BP (more precisely, it’s based on some Character-based C++ class) and two derived classes for blue and red characters (I couldn’t find a better way to replicate body color than using two different BP classes). The properties of the base BP are fine, but after a month of work the derived BPs started losing their mesh and animation properties. It’s like a contagious disease - first one of the child BPs got bad, then the other started losing the properties, then one of my colleagues got this problem but another one is still having all the BPs in good state.

Clearly this bug has not been fixed yet.

Yes, I can manually set the properties in the derived BPs, but who knows which other properties were affected…

As a workaround to my particular situation, I used a replicated property instead of BP subclasses. However, it would be cool to have the original problem solved - it’s almost three years old already.

I have found an annoying solution. I use blueprints and have numerous other issues with VARIABLE NAMES. Another example is having variables give values of 0, even when setting it otherwise. The solution is to rename the variable (EG add _ to the end). This will override the value in the child class to the parent default so be CAREFUL.