diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs index 1960bd3ef..76060edae 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtility.cs @@ -204,8 +204,8 @@ namespace Spine.Unity { UpdateLocal(skeletonGraphic); UpdateWorld(skeletonGraphic); UpdateComplete(skeletonGraphic); - } - } + } + } [HideInInspector] public SkeletonRenderer skeletonRenderer; [HideInInspector] public SkeletonGraphic skeletonGraphic; @@ -362,16 +362,21 @@ namespace Spine.Unity { if (skeleton == null) return; if (boneRoot != null) { - List constraintTargets = new List(); + List constrainedBones = new List(); ExposedList constraints = skeleton.Constraints; for (int i = 0, n = constraints.Count; i < n; i++) { IConstraint constraint = constraints.Items[i]; + ExposedList bones = null; if (constraint is IkConstraint) - constraintTargets.Add(((IkConstraint)constraint).Bones); + bones = ((IkConstraint)constraint).Bones; else if (constraint is TransformConstraint) - constraintTargets.Add(((TransformConstraint)constraint).Bones); + bones = ((TransformConstraint)constraint).Bones; else if (constraint is PathConstraint) - constraintTargets.Add(((PathConstraint)constraint).Bones); + bones = ((PathConstraint)constraint).Bones; + if (bones != null) { + for (int j = 0, m = bones.Count; j < m; j++) + constrainedBones.Add(bones.Items[j].bone); + } } List boneComponents = this.boneComponents; @@ -382,7 +387,7 @@ namespace Spine.Unity { if (b.bone == null) continue; } hasOverrideBones |= (b.mode == SkeletonUtilityBone.Mode.Override); - hasConstraintTargetBones |= constraintTargets.Contains(b.bone); + hasConstraintTargetBones |= constrainedBones.Contains(b.bone); } needToReprocessBones = false; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs index 39681a07f..f37d9f457 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonUtility/SkeletonUtilityBone.cs @@ -54,7 +54,7 @@ namespace Spine.Unity { Complete } -#region Inspector + #region Inspector /// If a bone isn't set, boneName is used to find the bone. public string boneName; public Transform parentReference; @@ -62,7 +62,7 @@ namespace Spine.Unity { public bool position, rotation, scale, zPosition = true; [Range(0f, 1f)] public float overrideAlpha = 1; -#endregion + #endregion public SkeletonUtility hierarchy; [System.NonSerialized] public Bone bone; @@ -159,6 +159,7 @@ namespace Spine.Unity { case UpdatePhase.World: case UpdatePhase.Complete: var appliedPose = bone.AppliedPose; + appliedPose.ValidateLocalTransform(skeleton); if (position) thisTransform.localPosition = new Vector3(appliedPose.X * positionScale, appliedPose.Y * positionScale, zPosition ? 0 : thisTransform.localPosition.z); diff --git a/spine-unity/Assets/Spine/package.json b/spine-unity/Assets/Spine/package.json index 94861664d..544e28858 100644 --- a/spine-unity/Assets/Spine/package.json +++ b/spine-unity/Assets/Spine/package.json @@ -2,7 +2,7 @@ "name": "com.esotericsoftware.spine.spine-unity", "displayName": "spine-unity Runtime", "description": "This plugin provides the spine-unity runtime core and examples. Spine Examples can be installed via the Samples tab.", - "version": "4.3.48", + "version": "4.3.49", "unity": "2018.3", "author": { "name": "Esoteric Software",