Can't Save Blueprint (Referenced in /Engine/transient)

So, after a couple of hours of pulling out rest of my hair, I have found issue specific to my project relating to this error:

I had created a Main HUD Widget, this widget has several children widgets in it. I had created a custom user widget which in itself contains several dynamically added custom user widgets. In case you haven’t guessed yet, it is for my Inventory system.

Now, basically, what I have is Main HUD widget with what I’m calling a Vendor Panel. Vendor panel has a couple of animations that play, through context of a custom event in Main HUD graph. Vendor panel itself has some logic. main portion of Vendor Panel contains a scroll control which I am adding VendorItem widgets to based on Vendor’s inventory. VendorItem widgets contain several buttons, i.e. Buy, Info and like. When you click one of these buttons, Main HUD will play an animation and for example, bring up Info Panel.

UNFORTUNATELY, this brings up a major circular reference issue - Main HUD references Vendor panel references Vendor slot references Main HUD.

When you click Buy button, lists have to be refreshed. So button calls a Refresh custom event in Main HUD which in turn calls a refresh in Vendor Panel. This type of pattern requires decoupling Main HUD from VendorItem slot widget. way that I’ve dealt this this type of issue in code is to pass an anonymous function pointer as a parameter, so that circular reference is removed. This way, one class doesn’t need to know about other in order to initiate some functionality.

I found this by accident, when I clicked on Vendor panel variable in graph of Main HUD, I saw that variable type had changed from ‘VendorPanel’ to ‘REINST_VendorPanel_C’ or some such. So, being unable to remove control directly from Graph view, I clicked on control in Desigenr — BOOM! UE4 triggers a break point! Oh, no! So I have to remove Vendor Panel from desiger by actually deleting its parent, which is a Vertical box.

Interestingly, when re-creating Vendor Panel in Main HUD, and running game, everything is all fine and dandy. Buying items left and right, refreshes occuring without a hitch. BUT, when closing editor and restarting from Visual Studio, blueprint can’t compile!

I haven’t implemented other button containing panels yet, but I’m pretty sure that if using same pattern described above, I’ll get same issue. I’m finding it difficult to avoid circular references in blueprints, that is particular when you compile one blueprint, another one gets decompiled. Perhaps some kind of warning from event graph could be useful for helping avoid these problems.

In meantime, gonna have to use interfaces and dispatchers to get this to work without breaking.

This problem happens to me very frequently, that’s very annoying!

Either UI widget is saved w/o any problem, and it’s working fine, or it refuses to be saved with that error message, complaining about some references that have a “REINST” word before their real type…

I have to delete them completely, and maybe this will compile again… and I’ll have to put them back with same type, save, compile, and it will work perfectly… until it will complain again about REINST type…

I have same kind of problem, I’ll try to remove circular dependencies too…

I wanted to clarify a little more of what I was doing in above -

So in order to activate animation in Main HUD, Vendor Item needed to know about that animation object. So I passed Main HUD as a ‘reference to self’ to Vendor Panel, which in turn passed it to Vendor Item, where button lives. button then uses referenced Main HUD to access its animation.

If we were to look at this in c++, we’d have something like:

MainHUD.h
#include VendorPanel.h
                                   
VendorPanel.h
#include MainHUD.h
#include VendorItem.h

VendorItem.h
#include MainHUD.h
#include VendorPanel.h

You can’t get job cuz you don’t have a car and you can’t get a car cuz you don’t got job…

I’m not sure why this would compile through blueprint, except that it isn’t checking for and warning about circular references. It merely decompiles dependencies. But it isn’t really surprising that this is breaking blueprints…

I have several game blueprints in which other blueprints decompile each other, but that is because blueprint compiler isn’t compiling in correct order. When starting up game from Visual Studio, blueprints are compiled in right order, i.e. all blueprints have a green checkmark. I can confirm this by running game in PIE immediatley after running editor from VS and noting in Output log that ‘No blueprints needed compiling’. But once a blueprint is changed, incorrect build order occurs.

Maybe it would be useful to be able to guide blueprint dependencies in editor, set compile order perhaps…

There is some kind of issue here - seems to be exclusive of UMG… even after very careful one way references to prevent circular reference, object gets borked. So I was able to fix my prior issue, but I created a new user control with no circular references and main widget insists on re-purposing child as a REINST. Which now there seems to be no resolving of. I’m going to try to recreate control from scratch, but this issue needs deeper research… Please let me know, I’d be happy to provide assets involved…

26345-reinst.jpg

Alas - I think I found problem – again. There seems to be a problem copying controls from one widget blueprint into another. For blueprint in question I had copy-pasted a bunch of text controls in an effort to save some tedium. So I recreated blueprint from scratch and everything seems to be working thus far with all same wiring.

From here on, I will skip on trans-blueprint copy-pasting and see how it goes.

Removing circular dependencies seems to have fixed problem… but it was hard!

In short, in my inventory, I had a sub-window with a button allowing to close whole inventory if needed. So I used inventory reference to kill it along with sub-window. But it was causing that problem of “REINST” type blocking saving.
However, as I was handling opening and closing of inventory from code (from character controls) via an event/delegate mechanism (with appearance of inventory window being handled in general hud UMG blueprint with a custom event bound to that character class delegate), I made a function call from that exit button to code function that sent exit event, and it worked.

Alas - again, it wasn’t copy paste - there is what seems to be a circular reference I had in my widget via a struct member reference to an actor object and that was causing issue this time. So it looks like I am going to have to put more effort into how I’m passing data back and forth from widget to widget, or just make a single massive widget and use that instead.

Update - so, instead of using an actor to pass this data back and forth, I’m using a struct instead and UMG seems to be accepting of my strategy - we’ll see how it goes, but I feel pretty confident this should work. I’ve already completed several other panels without further issue using structs instead of objects to get this data back and forth. Also, perhaps a set of utility functions to simply query data will also help to avoid this issue.

So since I still have this problem alot since august of last year, Have we figured out how to solve it yet? This solution doesn’t seem to work for me as it is not UMG related for me

Going by your screen shot ‘probprob’ above - can you find variable(s) that when selected contain ‘REINST’ in typename (i.e. REINST_MeleeCollision)? I don’t think ‘Transient’ has anything to do with it. You’d have to click on them one-by-one in outliner in graph (see my screenshot above). If you do see any, you’ll have to delete them. Completely. They are breaking your blueprint. You won’t be able to simply remove nodes from graph, I already tried that. problem will be that if you just recreate them, they will come back, you’ll have to change design of your blueprints all together. I’ve had this occur with non-UMG blueprints as well. I’m not at all sure why it happens with some references and not others.

If you do find them and delete them and you can get a save, I don’t know what to say about how to get it to work. I’d try recreating functionality one bit at a time you get error again, then you’d probably have to re-design around that variable until you can get it working. Since I really don’t have time to debug UE code, I can only guess what true problem is until UE team can get a fix or at least clarify and document what issue is and/or what we are doing wrong… Sorry bud…

Hi maelgrim and devlyn811,

If you’re seeing this consistently, would you mind uploading project somewhere so we can take a look at it? Any consistent reproduction steps would be extremely helpful. We’re still not able to reproduce this internally, and this may help us figure out what’s going on. Thanks!

I would but I don’t have bandwith to do so. I could try to reproduce issue and provide steps, if nobody else can get you a project.

Consistent reproduction steps would be even better, if you can find them. Let me know if you do!

Hey ,

I’ve been having same issue on one of my blueprints, and it still isn’t working in 4.7.0 (preview 7). I’ve attached a stripped down project file with blueprint in question along with some others that it requires. Below are repro steps to see problem as well as temporarily fix it (until you close and load project again).

  1. Unpack/Load project, and open ‘Blueprints/RulesEngine/RulesetLibrary’
  2. Move a node in graph, then attempt to save. Note error dialogs and inability to save.
  3. Open Reference Viewer for blueprint, select the ‘RulesetLibrary’ node and r-click->‘List Objects that Reference’. Note Transient.REINST reference.
  4. Go back to RulesetLibrary blueprint, and replace commented nodes in the ‘Contains’ and ‘Get Index’ functions. Just replace them with new copies of same nodes.
  5. Save - blueprint now saves fine, but if you repeat step 3 you see that transient references are still there (and there may be more).
  6. Close editor. This usually causes a crash on my full project, but with this small repro project it closes fine.
  7. Re-open project, and attempt to save again. You’ll get same error as before, and have to repeat this process again in order to save.

So basically to fix issue, temporarily, you have to replace all of blueprint’s references to its own internal functions. Once you do that you can save, but next time you open project it’ll be broken again.

As you can imagine not being able to save one of your blueprints is kind of a deal breaker - especially when it’s a massive one that’s pretty integral to your project… so hopefully this will help you track down problem!

link text

How many times do i need to say that I love you @. I cant believe that worked

It’s started happening on a new blueprint in my project, and it actually seems to be tied to BlueprintLibrary function calls specifically (not internal function calls). Same deal as sample project I uploaded - remove function calls to BlueprintLibrary and you can then save without error.

This new case was on a brand new Blueprint Library, and a brand new Blueprint Actor - in 4.7.0 Preview 8.

Also, if file is having this problem DO NOT attempt to rename it. It’ll rename all references then delete blueprint without creating new renamed version. Found that out today and had to restore project from a backup since it was so broken.

4.7.1. Same problem here. I cannot fix with any workaround listed here.link text It is obviously a bug in Unreal Editor.

Hi Villason,

We believe many of these instances have been fixed, and that they are largely result of circular dependencies. If you’re experiencing this issue in 4.7.1, please open a new Bug Report post with as many details as you can include, especially reproduction steps. Thanks!

I had this bug creep in as I migrated from 4.6.1 to 4.7.2 overnight … It compiles all blueprints and runs fine, but wont save a certain function library. For me root of issue was inside same blueprint function library that wouldn’t save. I tried stuff mentioned above such as copy paste to a text file and looking for “transient” etc. no luck. there was no faulty reference to be found.

What worked for me was to methodically delete groups of nodes in print functions and save until I identified which node(s) were making system crap out specifically.

In my particular case, one function was calling into another within blueprint function library so I deleted 2 nodes in question and added them back in and rewired them and then it saved properly. It seems to me like some sort of reference error when project migrated versions. perhaps there is an edge case with checking references that is not being handled by blueprint compile.

I was hoping to undo and copy paste faulty nodes and working nodes to notepad and compare but I’ve already saved over it and it cleared undo history. I made extensive changes so I cant easily revert right now. Perhaps someone else reading this is in a similar situation and can catch difference so epic can fix it or hopefully my description reveals something.

Hey xdbxdbx,

It sounds like you ran into what was reported here:

We’ve got a bug report in for that one. Keep an eye on that post for an update once it’s fixed.