There's definitely a thing with bounding boxes and various combinations of negative scale along its Transform hierarchy.
If you extensively have this setup, it may be worth acquainting yourself with it, regardless of Spine use.
Here's the basic logic of BoneFollower when it's not an immediate parent of your Spine GameObject though.
Transform skeletonTransform = skeletonRenderer.transform;
Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f));
Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
transform.position = targetWorldPosition;
transform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, worldRotation.z + bone.WorldRotationX);
Vector3 localScale = followLocalScale ? new Vector3(bone.scaleX, bone.scaleY, 1f) : new Vector3(1f, 1f, 1f);
if (followSkeletonFlip) localScale.y *= bone.skeleton.flipX ^ bone.skeleton.flipY ? -1f : 1f;
transform.localScale = localScale;
I think I sorta see where it breaks in this setup. The fix is less clear.
I suppose we need to negate the transformation from the parent since it would become doubly applied since we're inheriting it from skeletonTransform. But the checks required to know at what level transfomations need to be negated seems ridiculous.
11 May 2017 4:03 am
Can you try this? It's the BoneFollower.cs from the 3.6 branch.
https://raw.githubusercontent.com/EsotericSoftware/spine-runtimes/3.6-beta/spine-unity/Assets/spine-unity/BoneFollower.cs
This was the addition: [unity] Handle BoneFollower parent negative matrix scale.@ddce81c