modifying an existing blueprint interface


I have a blueprint issue I’m stuck on. I have a blueprint interface, with a single function to return some object properties. I have added this interface to several actor blueprints, and everything is working fine. Now I want to add an extra function to this interface to add some more functionality. I have opened the interface and added a function, it compiles fine, but none of the blueprints that implement the interface show it as part of the interface. I have tried re-adding the interface to an actor blueprint, and same problem, no new function listed. Is there some magic refresh method I have to use to get this to update?

ok, it seems that if you add a function to an interface with no return value, then any implementing blueprints don’t implement the function. If you add a dummy return value it works. Could someone confirm this as a bug? surely being able to call abstract void func(type param) is a sensible use case?

If you add a function without a return value you can add it to the event graph as an event (similar to beginplay or tick) instead of having to implement it.

I have a dozen objects that need to be holdable by the player, I pick something up by doing a trace, and then using an interface to interact with the holdable object. Events would work if I could add an event to the interface blueprint, but it seems I can only add functions right now, and I don’t have a concrete class instance to directly interact with.

If you have issues with your interface, can’t you group your objects to have them parented to one or 3 types of parents and cast to parent with a personalized effect in child ? I tried it with a 3 parent types system (parent item for loot / inventory, parent activable for doors / lift, parent character for enemies / allies, based on tom looman’s inventory, and it worked fine.

sorry I might not be explaining myself very well, I don’t have a problem per se, as I just added some unused return values to the functions so that interfaces work. I am not asking “how do i do this without interfaces”, what I would like to know is if there is a good design reason why void Func(void) should not cause the interface implementing blueprints to update with the new function, or if this is a bug?

In my mind its a bug, but I am rather new to blueprint and don’t always get the design intent of some of it.

Tell me if i’m wrong, but i think what you’re trying is in my pictures.

Thanks for that, you have really cleared this up. In the following screenshots, I was expecting the two functions to be shown as two functions under interfaces on the left hand side of the implementing blueprint. I didn’t know that functions without return values actually get mapped as events and not listed as part of the interface on the implementing blueprint. So its not a bug, just a bit of a poor UI experience.