diff --git a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs index f53aead51..1cec0264b 100644 --- a/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs +++ b/spine-unity/Assets/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs @@ -142,24 +142,25 @@ namespace Spine.Unity { break; case UpdatePhase.World: case UpdatePhase.Complete: - // Use Applied transform values (ax, ay, AppliedRotation, ascale) because world values may be modified by constraints. - bone.UpdateAppliedTransform(); + // Use Applied transform values (ax, ay, AppliedRotation, ascale) if world values were modified by constraints. + if (!bone.appliedValid) { + bone.UpdateAppliedTransform(); + if (position) + thisTransform.localPosition = new Vector3(bone.ax, bone.ay, 0); - if (position) - thisTransform.localPosition = new Vector3(bone.ax, bone.ay, 0); - - if (rotation) { - if (bone.data.transformMode.InheritsRotation()) { - thisTransform.localRotation = Quaternion.Euler(0, 0, bone.AppliedRotation); - } else { - Vector3 euler = skeletonTransform.rotation.eulerAngles; - thisTransform.rotation = Quaternion.Euler(euler.x, euler.y, euler.z + (bone.WorldRotationX * skeletonFlipRotation)); + if (rotation) { + if (bone.data.transformMode.InheritsRotation()) { + thisTransform.localRotation = Quaternion.Euler(0, 0, bone.AppliedRotation); + } else { + Vector3 euler = skeletonTransform.rotation.eulerAngles; + thisTransform.rotation = Quaternion.Euler(euler.x, euler.y, euler.z + (bone.WorldRotationX * skeletonFlipRotation)); + } } - } - if (scale) { - thisTransform.localScale = new Vector3(bone.ascaleX, bone.ascaleY, 1f); - incompatibleTransformMode = BoneTransformModeIncompatible(bone); + if (scale) { + thisTransform.localScale = new Vector3(bone.ascaleX, bone.ascaleY, 1f); + incompatibleTransformMode = BoneTransformModeIncompatible(bone); + } } break; }