I don't recommend using the experimental gist AnimationState anymore. The AnimationState from the 3.6-beta branch should work well.
You have 3 animations being mixed: track0 applies a1 and track1 applies a2 and a3. Because you have > 2 animations being mixed, it's the same problem as trying to fix dipping with multiple mixing, which unfortunately isn't possible to fix. 🙁 The only real fix is to only mix 2 animations, never > 2.
You can try changing this line:
spine-runtimes/AnimationState.cs at 3.6-beta
float alpha = timelinesLastItems != null && setupPose && !timelinesLastItems[i] ? alphaBase : alphaMix;
I'll explain this code: timelinesLastItems
is non-null when multipleMixing
is false (the default). timelinesLastItems
is true when the timeline is the last one to affect a property. So this code says, "Use alphaBase
to apply the timeline full strength, because another timeline is going to applied afterward". This is safe to do when setupPose
is true, which means this timeline is the first to be applied, so applying it full strength won't overwrite another timeline.
If you change that line to:
float alpha = timelinesLastItems != null && !timelinesLastItems[i] ? alphaBase : alphaMix;
This will fix your problem, but may negatively affect other situations. By removing the setupPose
check, every timeline for a property will be applied full strength, except for the last one, which is mixed with the second to last one. So the side effect from removing the setupPose
check is that when you are using multiple tracks, only the last 2 tracks which affect a property are mixed. This actually kind of makes sense when multipleMixing
is false. Anyway, you may see a snap when adding a 3rd animation to the mix, because the 1st will suddenly no longer be affecting the final pose.