Can animation montage time be addressed in Blueprint?

In my third-person beat-em-up game, I use individual montages for each animation in the attack combos and have set their blend out times to the exact point in the animation in which I want the next combo input to be accepted and played out, along with some other logic happening “on blend out.”
The issue I’ve just run into is that my character can upgrade his attack speed, which is handled simply by passing that variable into the play rate pin. Since the animation speed is now increased, the blend out time needs to be reduced or it causes some really whacky animation issues, and since a lot of the logic of the fighting is handled on blend out, the logic goes bonkers, as well. I’ve found the node for “get default blend out time” but there isn’t one for “set default blend out time.” The blend out time within the montage doesn’t seem to have any way to interact with it with blueprint, so I’m more than a little stumped here. Any advice on how to control blend out time with blueprint or c++?

A bit confused by your question/description here.

Is the blend out time speeding up along with the play rate?

Put simply, I cannot (or at least don’t know how to) change the blend out time of an animation montage within blueprints. Using the Play Montage node, it has input pins for play rate, starting position, etc, but no way to change the blend out time.
I tried switching over to using the Play Slot Animation node because it DOES have the blend out time as an input pin, but that node doesn’t have the “on blend out” exec pin.
As a direct answer to what you’ve asked here is this: At a normal play rate, an animation with blend out time of .25 will blend out exactly .25 seconds before the animation completes, but when the play rate is increased to 1.5, the animation STILL blends out .25 seconds before it completes. This greatly changes the way the animation behaves.
Put another way, if an animation has 100 frames and is exactly 10 seconds long with a blend out time of .1, it will start to blend out at frame 90 after 9 seconds. This is expected behavior, of course. But if that same 100 frame, 10 second animation with a blend out time of .1 is played at double speed, it will start blending out at frame 80, because the blend out time is relative to time and not to frames.

It’s more that blend out time is always constant - as expected.

I have to look over at the engine as I do not recall, however let’s start with a “you are doing it wrong” in the sense that you shouldn’t be relying on the onblendout trigger.

Why not just run a delay from the time remaining of the notify - an arbitrary value scaled by the same amount of the speed increase?

As a whole, the animation system is not frame driven, so you are better off driving things by time yourself.

And in cpp you can at least get the animation blend time - not sure in BP.
Try to create a variable and set the default to the animation, then pull from it and see if you get any blend info.

You may be able to change the blend time this way too, I still don’t recommend it.

If you do it, make your own montage interface and montage component in which you include standardized code to add around in all blueprints that need it.
You can use a soft reference to the animation or even just set the animation manually like you do montages. This way, it puts an extra layer allowing you to change timings in between the actual montage and and call from the player BP

As much as it sucks, I think starting with a “you are doing it wrong” is probably the most operant thing here. As clean as I think this would be, and as much as I don’t want to redo everything I’ve done here, I think it makes the most sense at this point to abandon this style and go for something a little more tried-and-true. I certainly appreciate the help, though.

1 Like