Hello,
I would like to bring up some inconsistencies I see throughout my engine workflow. I see them all over the place, but this one is particularly puzzling and I’m hoping you can address the issue and/or give an explanation for why it exists in its current form. We have three ways of getting execution flow from C++ to Blueprint:
BlueprintImplementableEvent
BlueprintNativeEvent
Multicast delegate
Each one of these has a different workflow in the Blueprint editor and it’s seriously confusing myself, and by extension everyone else I work with. I understand that BlueprintNativeEvent is the only one meant to have return values (and is more costly to use in code), but Multicast Delegates and BlueprintImplementableEvents are essentially the same thing and can surely be managed by the use of public/protected/private. I’ve read posts by one of the programmers at Epic who advocates using both a BlueprintImplementableEvent AND a Multicast Delegate just so you can use an event inside a class, and outside… I’ll go on to the workflow:
Blueprint Implementable Events
You implement these by right-clicking in the Blueprint Window, finding the Event in the “Add Event” list, and dropping it in:

This seems cumbersome, but fair enough.
Blueprint Native Events
These do NOT show up in the Event list, instead there’s a (much nicer) interface on the left hand side that you have to pay attention to. There’s a little text that says you can override a few functions:
![]()
Much better, but completely inconsistent. Now we have to hunt in two places.
Multicast Delegates
This is even crazier. It seems you specifically have to “bind to” an event to receive the call at all. This is a **third **place you have to check. After the binding is done, you can then process the event:

Yet someone at Epic must have seen that this is too cumbersome, and has given us nice functionality for any sub-components. You can simply right-click on a sub-component to add a handler, and magically all of this binding stuff is taken care of for you!

But for some reason you CAN’T do this on “Self” (at the top of the list!) This is where you’d want that kind of functionality.
The whole system seems incredibly bizarre.
My Request
Please consider consolidating these concepts and providing a standard workflow for adding these very similar functions to your Blueprint. Right now, every time a designer asks me for something, I have to tell them “well that’s an Event, so you have to do it this way”, or “that’s a Native Event, so you need to do this…” Which seems like an incredible waste of productivity. Making this system more consistent would be very beneficial to beginners of the engine.
Thanks.