A guy once told me that an interface basically shoots info and executes functions on all blueprints that implement the interface’s functions.
When I tried to use them, I always found myself in need of a reference forcing me to use casting once again.
For example I hooked a simple PrintText node to an interface’s function in a certain bp:

And then tried to call it from my PlayerController but nothing happened:

Do interfaces require references or am I missing something? Thanks!
That guy had BPI mixed up with event dispatchers 
A BPI on gets called on the specific actors that you call it on.
It’s worth nothing ( very ), that the reference you use to the actor should be exactly that, an actor reference. If the reference knows the type of actor ( MyBlueprint etc ), there’s no point in using an interface. You might as well just reach in and call the custom event yourself.
Why does this matter? Well, decoupling, which means you can call the interface on ANY kind of actor, without knowing how it actually responds to the call.
Looking at your example, if this is yellow
and you’re not sure what you’re doing with interfaces, then there’s a 100% chance you’re doing it wrong
( sorry ).
Right click and have another look for your interface name, you’ll notice there are several. Always use the one with an envelope on it for calling, and the one you have in pic1 for receiving. ( until you get the hang of it ).
Thank you for the fast response and clarifications, please bear with my rusty English for the rest of the reply.
I basically got into interfaces and event dispatchers just to avoid casting as much as possible for how expensive it can be.
Thanks to you, I now have a better understanding of interfaces, however, in case I want to communicate with a level bp, there is no way I’m avoiding casting right? After some trials I found that even event dispatchers require a reference because I couldn’t use them without one other than in the bp I initially created the event dispatcher in.
That’s the big problem with dispatchers, they need a known type reference. Which means dependency.
As for talking to the level BP, very easy answer, don’t do it. 
Seriously, just take any code you have in there and drop it in a BP actor that you put in the level. Bang, no more fiddling around trying to talk to the level BP.
Level BP has its place, but it’s for old-fashioned style ‘procedural’ programming. It’s much easier from all points of view when you get the hang of ‘object oriented’.
2 Likes
I’ve never actually thought about using an empty actor BP as a level manager. Thanks for the new perspective and tips 
1 Like
No worries. Maybe if you give me an example of the kind of thing you have in a level BP, I can point you in a good direction?
Thanks again for coming all this way to assist me.
It’s simple really, I’m just spawning a bunch of Knives and storing them in an array so I can later launch them into the air one by one using a Launch function written in the Knife BP.
That does sound like a case for dispatchers, to be fair.
The knives could bind to the level ‘controller BP’. Then it just sends one instruction and everything goes at once.
If a character is throwing them, it might be an idea to do some of this in the character. Or that in combination with the knife BP.
Sorry, not very exciting… 
1 Like