@Grelle Sorry for the late reply! The problem lies in the difference between Unity clip weights and Spine animation weights. Unity provides absolute weights of the form result = A*w1 + B*w2 + C*w3
where the sum of all weights w1 + w2 + w3 == 1
. Spine animations in the SkeletonMecanim
component are applied on the preceding skeleton state with a certain weight, which can be described as result = lerp(lerp(A, B, x), C, y)
for the same three animations.
In your blend tree, the order is important when you have three animations and two of them are identical. Close to the end of the transition, the values are as follows:
lerp(lerp(idle, idle, 0.8), right, 0.2)
equals lerp(idle, right, 0.2)
and is as expected, while
lerp(lerp(idle, left, 0.2), idle, 0.8)
equals left * 0.2*0.2 + idle * (1 - 0.2*0.2)
which weights left far lower.
When the transition is done, there are no longer three animations but only two, which is then again correct, thus immediately jumping to the correct end result, as you can see in your reproduction project.
I have just added an experimental additional MixMode
called Resolve
to the Mecanim Translator which calculates the respective Spine weights to match Unity's absolute weights better. While this will not resolve all issues for every possible scenario, it should be a fix for your use-case. It will take some more testing before this feature will be released officially, but I have attached it below for you for testing. Please let us know whether this works for you, and also if new issues arise.