Animation Updates

We’ve enabled the last big batch of animation changes on desktop. They change the internal animation code to have fewer bugs and be more amenable to change.

List of fixes/changes:

List of known bugs:

  • TimePosition setting is broken :-/ this will be fixed on Thursday (sorry!)

There’s also a new setting in Studio (well, the setting is old but it’s now useful) - Settings → Networking → ShowActiveAnimationAsset. If you enable this you will see debug overlay of all playing animation tracks on all Humanoid instances that are close enough to the camera - this can help you debug animation playback/transition issues.

Please post here if you have any issues with the animations because of this update.

Finally, as noted above - this is the last big batch which means that the behavior of animations should now be correct and stable - no breaking changes are anticipated in the short/mid term, apart from possible fixes to bugs you guys report (there are 2 pending bugs with animation replication having to do with playback of multiple tracks of the same animation and setting priority or adjusting weight which I’m hoping to fix at some point).

19 Likes

Behavior change worth mentioning:

If you had rigs that had a Humanoid and AnimationController inside of them (this is sometimes done in games that create a Humanoid after spawning a rig) your animations may not play. They will also not work (with the Play button) in the animation editor if you have both. Choose one, not both :slight_smile:

4 Likes

This update seems to have broken animations playing in NPCs on my game. I’ve tried changing a few things, like loading the animation onto an AnimationController instead of the Humanoid, but that didn’t work either. Here’s a repro file I made:

BrokenAnimationsRepro.rbxl (22.9 KB)

The script in the PlayerGui controls the following, and the Animate script in the NPC controls the animations. I could just be doing something wrong here, but who knows, it could be a bug :stuck_out_tongue:

2 Likes

I am currently running into an issue in my game where about 50% of my animations don’t play.

I have a script which generates random objects in a table and animates them accordingly, while some animate others don’t. I tested it in Studio’s Server and it works fine in server though it does not replicate to the client.

It is a group game, its not throwing any errors I’ve tried to do several things to fix it but nothing seems to be working. I am playing the animations from the server.

1 Like

You somehow have:

  1. Both a Humanoid and an AnimationController instance
  2. Two Animator children of AnimationController (this could happen before one of the fixes mentioned above)

Removing the AnimationController from your model and also commenting the lines of the script that create a new one (lines 10-15 of Enemy/Animate script) seems to fix the issue for me.

1 Like

Has this worked before - as in, is it a new issue? Regardless, if you provide a repro level it’ll help figure out what’s wrong.

P.S. Quite a few people seem to be running into Humanoid vs AnimationController issue. This is a side-effect of the fix for nested AnimationController/Humanoid objects, however I am wondering if I can make the existing behavior better.

Basically now an object that can play animations takes ownership of parts/joints unless there’s another object in the hierarchy. If you have two objects that are “fighting” for the same part currently both say “oh, there’s another object that seems to want to animate that part - I’ll give up”. I could make it so that if the objects are siblings, and of different type (AnimationController vs Humanoid), then one of them takes priority - although it’s not quite clear to me which one should.

For ownership of the part/joints, do you mean network ownership or some internal physics stuff?
In case of the physics, either have it blend or use the one that last ran an animation.
For the network ownership, the last object that starts running an animation.

I thought the Animator was for the server to be able to control the animations of a (clientside) Humanoid.
If that’s the case, why would there be any in an AnimationController, which I thought was already serverside?

(so much questions, need all the knowledge!)

I don’t like the sound of that. How will developers know which one takes priority? In all likelihood they won’t, even if there’s some obscure warning hidden on a wiki page. In order to fix this bug, all you’d be doing is opening the table to further bugs that are more complicated to grasp. “Why is my animation not behaving how I expect?” An hour later I might find out I had conflicting controllers and the one I expected to have control didn’t get control. The root of the problem is people using too many controllers – the issue should be communicated when that happens instead of allowing that weird usage to go unnoticed and lead to further problems down the road. That being said, instead of silently giving up when two controllers conflict, there should be a warning/error in the output that lets the user know what’s going on.

They don’t. And they shouldn’t have to because multiple controllers makes no sense. Humanoids and AnimationControllers both create an Animator object which is used to play and replicate animations. There’s no reason to have both.

As for a warning, that might be a good idea considering how many developers seem to be having issues with this.

Yep – I totally agree. Multiple controllers should not work.

I’m not saying multiple controllers or Humanoid objects should work, I’m saying there could be type-level differentiation.

I guess there could also be a warning for conflicting ownership for siblings - I’ll check if it’s possible to implement it in a non-spammy way.

Are there any use cases for using both a Humanoid and AnimationController as siblings? They may be different types, but as far as I’m aware, that’s still weird behavior when you could just be consolidating animations into one controller (excluding nested controllers).