Child Blueprints Keep Randomly Getting Reset on Editor Open

Hi, I have several blueprints that are mysteriously randomly resetting back to default upon reopening the editor. I’ve tracked down the issue to child blueprints only. The master blueprints seem to be unaffected. What I mean by random is, I can close and reopen the editor, and there’s like a 1 in 10 chance that several different blueprints will get reset back to their default values. Mostly just talking about Vector variables with visibility enabled and widget enabled. I’ve also seen “linear color” variables get reset too for some reason (again, child blueprints only). I’ve tried changing their parameters to “expose on spawn” - but that had no effect.

Has anybody else experienced this issue? I’ll try to get around to including a blueprint for example. Maybe someone would be willing to check out my blueprint and can point out any amateur mistakes I’m making?

Thanks!

There’s a bug where child blueprints with inherited and changed variables reset to default. This does include placed actors in the level, but I have also had this happen to the class itself.
It’s a very serious issue but its been around for a long time so it seems to be difficult to fix.

To go around this problem, I recommend not relying on setting child values. Another way would be to use data tables to hold the data, and when the actor is created, get the appropriate rows data and pass those values to the actors variables.

Yeah, child actors got the rough end of the hate-stick with 4.14.

I hadn’t even thought of data tables, but that still doesn’t allow the degree of customization that I would get out of a child actor. ;_;

Man, that’s a huge bummer. For what I’m doing, I most certainly cannot rely on data tables since I’m using these child blueprints extensively… and that would amount to a very laborious amount of tedious and unnecessary extra work. I guess I might just create duplicates of the offending blueprints and rely less on child blueprints - which will only get me so far. It means I’ll be creating forks of blueprints and if I have to modify both blueprints, that’s double or triple the work depending on how many forks I create. Insanely unappealing. I might have to take a second look at making actor components to achieve functionality across multiple blueprints - which I hate dearly because of how much extra confusion it adds.

Thanks for the responses.

I really don’t understand how such a serious showstopping bug is left unresolved for so many versions.

I ended up just doing it all in C++. It took… Time. And bulletproofing. And remembering how the blueprints used to look.

But at least it can’t get corrupted/reset/whatever?

That’s a good question.

It’s been isolated to have to do with you renaming variables in the parent class, leads to some child blueprints reverting to default values

I’m having it happening in my current project regardless of renaming. I haven’t touched the parent class in weeks.

I’m not going to say that it can’t, but you can feel very safe with C++. The problem specifically is tied to blueprints. And I have not read anything of the sort happening to C++ cases.

This. I can leave the parent and the child blueprint alone for days, reopen the editor and there’s a 1/10 chance all of the child blueprints will get reset. Sometimes for multiple child blueprints, and I’ve noticed that when they do reset, it’s all at the same time. In other words, it’s like a 1/10 chance that numerous, different, completely separate child blueprints will get reset.

I hope this is fixed soon, this is the most infuriating bug and it’s happening to me pretty frequently now. Been since at LEAST 4.13, I updates to 4.14 to hope it would fix it. Major issue and very time consuming to correct every time.

I solved this problem by giving the variable a Category and Instance Editable.

I am stuck with a huge project due to this bug. Have worked on a project 3 days a week for one year now but I am completely stuck due to all values constantly reseting themselves each time I restart the editor

Been trying to figure out a workaround. Do you need the instance to be updated in the editor - as in construction script - or is it fine if it’s on begin play?

Because the first idea was to use a decorator - an actor component in this case - that holds the data and you edit the data on the actor component on each instance, which you pull the data from in the actor. But this does not work during construction. But it does work on begin play.
However, maybe this actor components data also risk resetting? I don’t know since I don’t have a project with that problem.

The second thought was to have some actor class that references each instance and sets each instance data based on a Map.

Here I have 3 instances of a class that holds a light. The color is what needs to be instanced. I know it can be done in the light component, it’s just an example.
Also 1 ‘controller’ actor. It has a Map holding the key to a light actor ref and a value of the color, which would be all the data that you need. instance exposed to they can be added to the map in the editor.
When the controller or any of the lights are compiled, the controller iterates through them, setting the color.

ChildClassVar3.png

The Element check is to know which instance you edit with a big arrow.
This method does update in the editor. But I don’t really know if I would use this method myself. It’s really a desperate last solution method.
With the editor utility options it might be possible to make this process less painful. - you might even be able to set the values of your instance like you do now, have some editor utility pass those values to the Map which should save them through editor restarts.

1 Like

In my case I am never changing any values on the objects that are placed in the scene.
I am just trying to change the default values in the editor for the child of a pickup item blueprint without placing it in the scene.
These values keeps resetting to their parent default each time the editor is restarted.

The game I am developing is a medieval RPG type of game and the child actors corresponds to pickup items in the game.
To make the game I am using two pre-made systems from the epic games store, DCS combat system an another one for the user interface.
For communicating which items has been added to inventory I send a message between the systems with the child class that was picked up

  • this works perfectly before I restart the engine and the values reset.

The issue is that whenever I call the item or child class in any blueprint all its values resets to its parent default after a restart of the engine.
This means I am unable to make these two very complex systems transfer any information in between/communicate items with each-other.

In my attempts to solve the issue I have successfully been able to pinpoint some things that are causing the issue to happen although its is neither logical or working as I assume is intended.

I can confirm that doing the following makes the child blueprint reset to its parents default after a reboot of the engine (happens every time so its consistent):

  • It does not matter if I am referencing through structs or directly towards the blueprint class, it happens anyway as long as the class is called somewhere.
  • Whenever I am calling the affected child item blueprint its values its getting reset after reboot.
  • If I am just including the class inside a data table (without even using it), the issue will also appear.
  • I have tried to call it both from the character and player controller, I am getting the same issue calling it from both these blueprints.
    The information also has to pass through the player character for the multiplayer replication to work as it is done currently.
  • I have tried deleting all maps, fix up all re-directories and tried disabling all third party plugins, none of this help.

Edit: Also thank you for your reply **ste1nar, **I am very much appreciating any help I could get with this even if you are having the issue in a very different context with a possible work-around. :slight_smile:

Could someone that are familiar with the source code of unreal engine, maybe a developer look into why this could be happening? I have been able to solve all previous issues for a year of development by myself but this issue I really don’t know what more to do without redoing a huge part of my game which I am not even sure will solve the issue.

I have now continued investigating the issue by looking at the saved child blueprint uasset files themselves and they do actually contain all the added information still after closing and reopening the engine.
This means that the issue is that unreal engine does not read this information when starting the engine or that the information gets overwritten by the parents values after they had been read.

Could I somehow force unreal engine to read the values from the child blurprint uasset file again after the engine has been booted?

I just solved the issue by enabling “instance is editable” for the variable struct located in the parent blueprint as well as disabling variable attribute “read only” under the same variable settings location! Hope this will help someone else! :D:rolleyes:

1 Like

I had the same issue here. Suddenly I had all the component properties reset from the BP.
It appeared when I first add new properties and then do it on every engine start.
I fixed it by duplicating the bugged BP and now the new one is working…
I have just a few data to replace on my level so I guess it was the less time consuming solution.

In my case this was happening in a Widget Component. Solution was to uncheck “Editable when inherited” in that component, on parent class.

1 Like