Why is this specific circular dependency breaking our blueprints?

This issue is fairly hard to explain, so let me know if I need to provide more information.

  1. We have an “instruction panel” bp class. This class has a child actor of “button” bp class.

  2. The “button” class eventually references the playercharacter via some crazy chain of dependencies (just found this in the reference viewer)

  3. The moment I add an “instruction panel” reference to playercharacter bp, any change to game instance breaks the “button” bp class after an engine restart.

  4. This is the error message we see upon opening the “button” blueprint (in visual studio output):
    “Warning Pasted node K2Node_Event_xxxx conflicted with K2Node_Event_xxxx and was replaced as a Custom Event!”
    Essentially, all of events inside of the button class are replaced. For example, Event Begin Play is replaced with an event called “Recieved_BeginPlay1”.

  5. We’ve tried remaking the button class, deleting intermediate, re-adding the original events, etc. We just realized that this is probably a circular dependency issue.

Also, once the “button” class is in this broken state, the engine crashes when we open the reference viewer on anything related to the blueprint.

We are currently getting away with other circular dependencies in our blueprints. Any ideas?
Thanks!

The “button” class eventually references the playercharacter via some crazy chain of dependencies (just found this in the reference viewer)

It’s going to be fairly hard to give you a straight answer based off of this alone.

The short answer is: clean up your blueprints not to have circular dependencies. Make use of “GetOwner” or “GetOwningController” for actors or widgets and then cast those to the appropriate player controllers if you want data from them.

If you need a widget to own another widget, make sure you give it an “Owning Widget” variable and set it up after a widget is spawned, that way you can use that owning widget reference as needed in a child widget.

The long answer would require a much better understanding of your project and how everything is set up, which I don’t think will be time efficient if you have a lot going on inside of it.