diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs
index cee6ecf9f..9373f93ad 100644
--- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs
+++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonDebugWindow.cs
@@ -229,9 +229,9 @@ namespace Spine.Unity.Editor {
// Flip
EditorGUILayout.BeginHorizontal(GUILayout.MaxWidth(160f));
- EditorGUILayout.LabelField("Flip", GUILayout.MaxWidth(EditorGUIUtility.labelWidth - 20f));
- skeleton.FlipX = EditorGUILayout.ToggleLeft(".FlipX", skeleton.FlipX, GUILayout.MaxWidth(70f));
- skeleton.FlipY = EditorGUILayout.ToggleLeft(".FlipY", skeleton.FlipY, GUILayout.MaxWidth(70f));
+ EditorGUILayout.LabelField("Scale", GUILayout.MaxWidth(EditorGUIUtility.labelWidth - 20f));
+ skeleton.ScaleX = EditorGUILayout.DelayedFloatField(".ScaleX", skeleton.ScaleX, GUILayout.MaxWidth(70f));
+ skeleton.ScaleY = EditorGUILayout.DelayedFloatField(".ScaleY", skeleton.ScaleY, GUILayout.MaxWidth(70f));
GUILayout.EndHorizontal();
// Color
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/BoneFollower.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/BoneFollower.cs
index 6ce6f147c..c462b262c 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/BoneFollower.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/BoneFollower.cs
@@ -164,19 +164,14 @@ namespace Spine.Unity {
if (followBoneRotation) {
Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
if (followLocalScale && bone.scaleX < 0) boneWorldRotation += 180f;
- #if UNITY_5_6_OR_NEWER
thisTransform.SetPositionAndRotation(targetWorldPosition, Quaternion.Euler(worldRotation.x, worldRotation.y, worldRotation.z + boneWorldRotation));
- #else
- thisTransform.position = targetWorldPosition;
- thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, worldRotation.z + bone.WorldRotationX);
- #endif
} else {
thisTransform.position = targetWorldPosition;
}
}
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;
+ if (followSkeletonFlip) localScale.y *= Mathf.Sign(bone.skeleton.scaleX * bone.skeleton.scaleY);
thisTransform.localScale = localScale;
}
}
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/PointFollower.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/PointFollower.cs
index f3702beb5..e75309356 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/PointFollower.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/PointFollower.cs
@@ -145,7 +145,7 @@ namespace Spine.Unity {
if (followSkeletonFlip) {
Vector3 localScale = thisTransform.localScale;
- localScale.y = Mathf.Abs(localScale.y) * (bone.skeleton.flipX ^ bone.skeleton.flipY ? -1f : 1f);
+ localScale.y = Mathf.Abs(localScale.y) * Mathf.Sign(bone.skeleton.scaleX * bone.skeleton.scaleY);
thisTransform.localScale = localScale;
}
}
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
index 21907bb7f..e4e25d464 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonRenderer.cs
@@ -207,8 +207,8 @@ namespace Spine.Unity {
rendererBuffers.Initialize();
skeleton = new Skeleton(skeletonData) {
- flipX = initialFlipX,
- flipY = initialFlipY
+ scaleX = initialFlipX ? -1 : 1,
+ scaleY = initialFlipY ? -1 : 1
};
if (!string.IsNullOrEmpty(initialSkinName) && !string.Equals(initialSkinName, "default", System.StringComparison.Ordinal))
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs
index 9d4b12032..9b76040c5 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Mesh Generation/SpineMesh.cs
@@ -308,10 +308,10 @@ namespace Spine.Unity {
#if SPINE_TRIANGLECHECK
var clippingAttachment = attachment as ClippingAttachment;
if (clippingAttachment != null) {
- clippingEndSlot = clippingAttachment.endSlot;
- clippingAttachmentSource = i;
- current.hasClipping = true;
- skeletonHasClipping = true;
+ clippingEndSlot = clippingAttachment.endSlot;
+ clippingAttachmentSource = i;
+ current.hasClipping = true;
+ skeletonHasClipping = true;
}
#endif
noRender = true;
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs
index d43fb19ac..da7248f36 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll.cs
@@ -313,8 +313,8 @@ namespace Spine.Unity.Modules {
}
void UpdateSpineSkeleton (ISkeletonAnimation skeletonRenderer) {
- bool flipX = skeleton.flipX;
- bool flipY = skeleton.flipY;
+ bool flipX = skeleton.ScaleX < 0;
+ bool flipY = skeleton.ScaleY < 0;
bool flipXOR = flipX ^ flipY;
bool flipOR = flipX || flipY;
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs
index 0e9c0aba2..f66015a74 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Ragdoll/SkeletonRagdoll2D.cs
@@ -311,8 +311,8 @@ namespace Spine.Unity.Modules {
/// Performed every skeleton animation update to translate Unity Transforms positions into Spine bone transforms.
void UpdateSpineSkeleton (ISkeletonAnimation animatedSkeleton) {
- bool flipX = skeleton.flipX;
- bool flipY = skeleton.flipY;
+ bool flipX = skeleton.ScaleX < 0;
+ bool flipY = skeleton.ScaleY < 0;
bool flipXOR = flipX ^ flipY;
bool flipOR = flipX || flipY;
var startingBone = this.StartingBone;
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/BoneFollowerGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/BoneFollowerGraphic.cs
index f399e9bc2..e833c4453 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/BoneFollowerGraphic.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/BoneFollowerGraphic.cs
@@ -123,7 +123,7 @@ namespace Spine.Unity {
}
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;
+ if (followSkeletonFlip) localScale.y *= Mathf.Sign(bone.skeleton.scaleX * bone.skeleton.scaleY);
thisTransform.localScale = localScale;
}
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs
index 43519c3d2..d76021a58 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/SkeletonGraphic/SkeletonGraphic.cs
@@ -82,8 +82,8 @@ namespace Spine.Unity {
// Only provide visual feedback to inspector changes in Unity Editor Edit mode.
if (!Application.isPlaying) {
- skeleton.flipX = this.initialFlipX;
- skeleton.flipY = this.initialFlipY;
+ skeleton.scaleX = this.initialFlipX ? -1 : 1;
+ skeleton.scaleY = this.initialFlipY ? -1 : 1;
skeleton.SetToSetupPose();
if (!string.IsNullOrEmpty(startingAnimation))
@@ -233,8 +233,8 @@ namespace Spine.Unity {
}
this.skeleton = new Skeleton(skeletonData) {
- flipX = this.initialFlipX,
- flipY = this.initialFlipY
+ scaleX = this.initialFlipX ? -1 : 1,
+ scaleY = this.initialFlipY ? -1 : 1
};
meshBuffers = new DoubleBuffered();
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs
index a46959fbc..d48234ffd 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtility.cs
@@ -123,10 +123,10 @@ namespace Spine.Unity {
var skeleton = skeletonRenderer.skeleton;
if (boneRoot != null && skeleton != null) {
Vector3 flipScale = Vector3.one;
- if (skeleton.FlipX)
+ if (skeleton.scaleX < 0)
flipScale.x = -1;
- if (skeleton.FlipY)
+ if (skeleton.scaleY < 0)
flipScale.y = -1;
boneRoot.localScale = flipScale;
diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs
index 1cec0264b..771045010 100644
--- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs
+++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonUtility/SkeletonUtilityBone.cs
@@ -119,7 +119,7 @@ namespace Spine.Unity {
}
var thisTransform = cachedTransform;
- float skeletonFlipRotation = (skeleton.flipX ^ skeleton.flipY) ? -1f : 1f;
+ float skeletonFlipRotation = Mathf.Sign(skeleton.scaleX * skeleton.scaleY);
if (mode == Mode.Follow) {
switch (phase) {
case UpdatePhase.Local: