Do not automatically stop animations; Allow 0 fade time for Play(), Stop(), AdjustWeight()

As a Roblox developer, it is currently too hard to implement complex animation systems with smooth transitions on top of Roblox’s built-in animation system. In general, the API is too high-level, and I oftentimes find myself employing “hacky” methods to achieve more complex behavior.

I will limit this post to one particular request that I have for the Roblox animation framework: the ability to implement custom, non-linear animation fading. In order to accomplish this, developers must tween multiple animations in and out at the same time using some nonlinear smoothing functions and the animation_track:AdjustWeight() & animation_track:AdjustSpeed() API. However, the current Roblox animation system does some things under the hood to interfere with this. If you play an animation starting with 0 weight (which is necessary to tween in an animation using custom smoothing functions), the animation will automatically stop. Moreover, if you attempt to start an animation with a low weight while another of a high weight is playing, the one you are attempting to start will automatically stop.

To rectify these issues, the animation system should only automatically stop those animations which reach their end and are not looped, irrespective of their weight and speed or the weight and speed of other playing animations. When developers call the animation_track:Play(…) method, they should have complete insurance that the animation at hand will run until it ends (if not looped) or they call animation_track:Stop().

Developers should also be able to call the anim_track:Play() and anim_track:Stop() methods with 0 fade time (which I believe is already possible with anim_track:AdjustWeight()). This is to facilitate the fading in and out of animations in the case where developers want to implement their own, non-linear tweening behavior rather than using Roblox’s linear setup. For instance, if a developer wanted to implement his own animation fade-out, he would incrementally call AdjustWeight() (and maybe AdjustSpeed() as well) until his weight value reaches 0. At this point, he would call anim_track:Stop() with 0 fade time, so that the animation stops immediately.

If Roblox is able to address this issue, it would allow developers to implement more robust animation systems without having to go through the work or take the performance hit of implementing their own. In my particular case, this fix would stop the problems I am having with my current project – namely that animations stop when played with 0 weight and sometimes stop when played in tandem with others of higher weight.

55 Likes

This issue is really annoying, how has this not been addressed? This issue is ages old, with multiple reports:

We shouldn’t have to do what @ OP said, using hacky work arounds to achieve this goal. I have seen numerous code bases using animation:AdjustWeight(0.0001,time) which just looks absolutely ridiculous. When I was told this was because we literally cannot use 0 I did not believe it. This completely stops animations - this should never happen.

We need transparency. Bug reports of this dating back to 2016 without any response is absolutely insane!

6 Likes