Animations with a rate scale of -1.0 do not played via BPs

I haven’t tried playing the animations any other way but…

  • Take any animation
  • Duplicate it
  • Edit it
  • Set it’s play scale to -1.0
  • Note is plays backwards now
  • Create a BP on an actor that has a skeletalmesh component and can play that anim sequence
  • On begin play, use the Play Animation node to try to play this animation
  • Note that it does not play
  • Note that other animations with positive play scales do play

Tommy.

Hi TommyBear,

I am not able to reproduce this. If it’s a short animation, do you mean to have looping enabled on the Play Animation node? Does this reproduce for you with assets in one of our templates or only with custom assets?

Also, just to clarify, when you say “play scale” you mean the “Rate Scale” variable in the Anim Asset Details, right?

Below is my process of trying to reproduce this:

NOTE: Right click image and view in new tab to see higher res

Yep I mean rate scale. I think I might know what the issue is! Hold on.

Aha okay, so I think is an edge case. I don’t have looped set. If you turn looped off and play the animation, it won’t play at least once, which is the main issue here, and that is the actual bug. Playing an animation, whether it is looped or not, I reasonably expect as a user, for it to actually play that one time :wink: I understand that because it is a rate scale of -1.0, it is hitting a condition that is checking if frame==endframe and stopping immediately, which is incorrect. Looping is not an option for me because I want to programmatically check for the finish of the animation and play a different one, -1.0 or otherwise. So yeah, this is still a bug for me.

Hey Tommy,

I could have sworn I had tested it without looping and seen it animate, but I see now that it isn’t. I guess I’m losing my mind. I had only asked about looping because frequently people don’t see it playing and just missed it because their animation was very short or something. Instead I just found a case where it doesn’t reproduce :stuck_out_tongue:

Anyways, I’ve reported this bug as UE-12219. Thanks for sending this in!!

Awesome stuff ! Thank you so much for your time :slight_smile:

Tommy.

My pleasure, this is how we make the engine better :slight_smile:

Just wanted to let you know that the bug has been reported as fixed. Still awaits verification.

Whoo! Fantastic!!! Thanking you!

Hi all,

I’ve encountered quite a number of animation-related bugs on a similar theme…I have a skeletal mesh with an associated (which has an animation sequence as well as an animation blueprint). Now while the animation plays fine via the animation blueprint using a playback rate of 1(or any positive value), it goes wrong for any negative playback rate(the animation appears to play at some arbitrarily large negative rate regardless of what’s given). What’s more, while “anim notify” events placed in the animation’s timeline track are correctly fired when playback rate is positive, strangely only some of them get fired when playback rate is negative. Now when it comes to playing the animation as an “animation asset”, while setting the “Play Rate” of a skeletal mesh component to “-1” in the editor panel will correctly playback in reverse, it’ll not do so when I set it via a blueprint node(seems to stay fixed at 1 no matter what). Setting the "Global Anim Rate Scale"to “-1” in the editor panel will also reverse playback the animation asset correctly, but not when I set it via a blueprint node(the animation will playback insanely quickly in reverse). Any clues as to all this incoherent weirdness? FYI, I’m using ver 4.7.5.

Thanks!

Hey ,

Thanks for posting here, but if it’s alright with you, I am going to handle your problems in the new answerhub question that you posted.

Thanks,

Hi ,

No prob , I’ll check out your reply on that thread then…

Cheers,
.

Hey ,
I am now running into this same issue that TommyBear reported. Set Play Rate to “-1” does not play the animation in reverse, instead nothing happens. If I turn Looping on, it will indeed work as I would expect, but I don’t want it to Loop!.. So… I don’t understand how the bug has been fixed ^^’ (Using Unreal 4.10.2 at the moment)

Hey Jorge,

Thanks for pinging this thread again. I re-tested it in latest builds and it has indeed come back. I’ve re-opened the bug listed in my original answer.

In the meantime though, the workaround is to set the Initial Position (found in the skeletal mesh details panel) to the end of the animation. This field is in seconds, but if you want to be exact, you can just enter a number higher than the total time of the animation and it will be truncated to the end time.

Thank you very much, for checking, !

Meanwhile I tested connecting stuff differently and it worked! The Set Play Rate is now working with the value of “-1” as I expected, but I don’t know what made the trick O_o I can pass you a printscreen or something if you need it. In the mean time, I would like to post a different question, maybe you can redirect it somewhere else if you find it doesn’t fit this topic anymore:

So I’m in the middle of animating a door that opens when I approach, closes when I step back. But if I approach the door while it is closing, I want it to interrupt the closing animation and reverse to reopen. So I have this Branch node that says “if an animation is playing, stop, reverse; else, play (until the end of the closing animation)”. But the “is playing” node is not working as expected, because as soon as I hit Play and approach the door, it won’t open, because it reads that the opening animation itself “is playing” already; in other words, it collides sooner than expected… This is because the “Is Playing” node expects a skeletal mesh component as target. I only have the one for the door to give it, so it will always collide. And even if I duplicate it and use one copy of the skeletal mesh component node for the begin overlap trigger and the other copy for the end overlap trigger, it will still read it as being the same. I don’t understand why it reads as “playing”, since it is not, it would only play now for the first time. So I’m not sure if it’s a bug or not. What would really be handy was if I could use as target the animation, so that I could say “if the animation of closing is playing, interrupt it and reverse it”.

All help will be much appreciated!
Thanks for bearing with me :slight_smile:

Hey Jorge,

I’d like to try and keep this thread on topic. Please start a new thread if you have any unrelated questions.

Hi I’m having the same issue described here. I have a simple animation of a chest opening. When I trigger it, the “open” animation plays fine and stops. I have duplicated the animation sequence and set its rate scale to -1. But when I trigger the “close” animation, rather than see it play in reverse, it just jumps back to the start frame and skips the animation entirely. Am I doing something wrong? This seems like it should be really straightforward and simple.

I also tried checking the “looping?” box, and while it does result in the animation actually playing backwards, it of course loops over and over and doesn’t stop at the end (first) frame like I want.

Halp?

(Oh yeah, I’m using version 4.13.2)

Are you setting the start position to the full length of the animation before triggering the negative play rate animation? Otherwise the start position is 0 and it has nowhere to go.

If, say, your animation is 2.5 seconds, you’ll need to set the start position to 2.5 immediately before triggering the negative play rate animation.

In all honesty, I’d recommend just animating it in reverse for your case to avoid these issues.

Thanks for the quick reply. Where do I set the start position?

I agree that at this point it might be easier to export a 2nd animation but this could be a real useful time saver if it worked as expected.

Here’s my blueprint if it’s helpful:

Apologies, you actually have to do set position AFTER play, not before. See below.

2 Likes