Download

Event dispatchers | Interfaces - weird interaction

Hi all, I basically have a character actor and within in it - a component that control units orders and abilities. Basically when certain conditions in the component are met, it will tell the owning actor to do something. And while on the surface level - it seems to work fine, I run into an issue whenever I try call an event within the owning character’s skeletal mesh’s anim blueprint through the implemented interface or binded events. It’s weird because I can see the events are properly being called, but the anim montage won’t play.

This is the event in the anim bp - the Gather Animation is called and I see the “why wont it play” print string debug in game. But no montages are being played.

I was originally using event dispatchers in the responsible component - and binding events to them from the owning actor. Maybe I’m not supposed to bind functions from outside the scope of the actor that owns the dispatchers - but regardless they worked just fine for everything except this teeny part of the events. (There are so many instances in my game where I bind functions outside of the class with dispatchers and they all work fine, mostly with UMG buttons).

Then I tried doing interfaces, the component and the actor both implement the interface - but this had the same problems as the bind dispatchers. It works on everything - except the anim bp montages. Please tell me I’m doing something wrong - I really hope this is not a bug.

I’ve worked around this by just setting a boolean - and having the character check on tick whether it’s set on or not. But honestly I’m trying to do a very simple thing here - it SHOULD work!

Thanks in advance,
Michael

P.S. I’m don’t have a deep understanding of programming - but my initial thought was that bp interfaces and dispatchers create copies of functions (like a macro or something similar) and the reference to the character get lost in the process somehow. But If this is the case - I wouldn’t be able to change variables via binded dispatcher funcs and interfaces either. So I have no clue…

I have some questions. Trying to understand what you have going:

  • Why is there a stop montage and then a play montage? The execute wire running behind the stop montage is confusing to decipher.
  • Are you doing this kind of thing, this method of setup, anywhere else? Calling montages in this way?
  • Have you worked with montages before?
  • Is there a need to call this in the anim bp instead of the character bp?