Got it, thanks!
This occurs due to a change in 4.2.60-beta:
https://esotericsoftware.com/spine-changelog#v4-2-60-beta
Don't wrap rotation and shear Y for a transform constraint when local is checked and relative is not.
That change was made because of this issue:
EsotericSoftware/spine-editor729
When Local
is checked and Relative
is unchecked, before 4.2.60-beta we wrap 0-360 degrees. This causes the constrained bone rotation to jump as the target rotates. You can see this if you rotate your Hair_Control
bone 360 degrees: at a certain rotation the hair bones jump (when using 4.2.43-beta). Make sure you are in animate mode, as setup mode rotation is always wrapped 0-360.
That jumping is not generally useful behavior so in 4.2.60-beta we change the behavior to be a percentage of the target bone rotation, without wrapping the rotation 0-360. If you try the same test (in animate mode), you'll see the behavior is much better.
To fix your problem, you can set the rotation mixes to zero if you don't need rotation constrained. When using transform constraints, always unlinked the sliders and set the mixes to zero for properties you don't need constrained. This is because some processing is needed for each non-zero mix.
If you do need rotation constrained, you'll need to change your project. You could setup your constraints slightly differently. For example, you can get the exact same behavior (including the jumping) by unchecking Local
and rotating your bones.
I think using Local
isn't quite what you want (though it can be made to work). The reason is that your Hair_Control
location rotation is 268. Its parent bone root
is pointing right. The constrained bones, like Hair_B2
location rotation is 178 to make it point in the same direction. Its parent bone Hair_B
is pointing down. When the parent bones are pointing different directions, constraining local rotation without Relative
checked will point them in different directions (both will be 268). It gives you the result you desire only because your mixes are low (10). Using Local
makes more sense if you check Relative
.
While looking into this, I can see that transform constraint rotation offset could be useful outside the range of -180 to 180 when using a low mix. We've removed that restriction.
Similarly, it could be useful to set bones in setup mode outside the range of 0-360, for example when using constraints with low mixes. I also never liked that setup differs from animate mode in this way. So, in 4.2.67-beta we'll remove these restrictions on setup mode.
Another way to fix your project (in 4.2.67-beta) is to rotate the Hair_Control
bone one revolution. This gives you the exact same results you had, except you'll never get the rotation jumping as explained above.
We were hoping people weren't relying much on the old behavior. With these changes at least I think fixing it is pretty easy.