diff --git a/spine-unity/Assets/spine-unity/BoneFollower.cs b/spine-unity/Assets/spine-unity/BoneFollower.cs
index 5cfb97b51..43c18fac8 100644
--- a/spine-unity/Assets/spine-unity/BoneFollower.cs
+++ b/spine-unity/Assets/spine-unity/BoneFollower.cs
@@ -40,14 +40,8 @@ using Spine;
[AddComponentMenu("Spine/BoneFollower")]
public class BoneFollower : MonoBehaviour {
- [System.NonSerialized]
- public bool
- valid;
+ #region Inspector
public SkeletonRenderer skeletonRenderer;
- public Bone bone;
- public bool followZPosition = true;
- public bool followBoneRotation = true;
-
public SkeletonRenderer SkeletonRenderer {
get { return skeletonRenderer; }
set {
@@ -55,15 +49,21 @@ public class BoneFollower : MonoBehaviour {
Reset();
}
}
-
-
/// If a bone isn't set, boneName is used to find the bone.
-
[SpineBone(dataField: "skeletonRenderer")]
public String boneName;
+
+ public bool followZPosition = true;
+ public bool followBoneRotation = true;
public bool resetOnAwake = true;
- protected Transform cachedTransform;
- protected Transform skeletonTransform;
+ #endregion
+
+ [NonSerialized]
+ public bool valid;
+
+ [NonSerialized]
+ public Bone bone;
+ Transform skeletonTransform;
public void HandleResetRenderer (SkeletonRenderer skeletonRenderer) {
Reset();
@@ -71,21 +71,21 @@ public class BoneFollower : MonoBehaviour {
public void Reset () {
bone = null;
- cachedTransform = transform;
valid = skeletonRenderer != null && skeletonRenderer.valid;
- if (!valid)
- return;
- skeletonTransform = skeletonRenderer.transform;
+ if (!valid) return;
+
+ skeletonTransform = skeletonRenderer.transform;
skeletonRenderer.OnRebuild -= HandleResetRenderer;
skeletonRenderer.OnRebuild += HandleResetRenderer;
+ #if UNITY_EDITOR
if (Application.isEditor)
DoUpdate();
+ #endif
}
void OnDestroy () {
- //cleanup
if (skeletonRenderer != null)
skeletonRenderer.OnRebuild -= HandleResetRenderer;
}
@@ -112,33 +112,33 @@ public class BoneFollower : MonoBehaviour {
if (bone == null) {
Debug.LogError("Bone not found: " + boneName, this);
return;
- } else {
-
}
}
- Spine.Skeleton skeleton = skeletonRenderer.skeleton;
+ Skeleton skeleton = skeletonRenderer.skeleton;
float flipRotation = (skeleton.flipX ^ skeleton.flipY) ? -1f : 1f;
+ Transform thisTransform = this.transform;
- if (cachedTransform.parent == skeletonTransform) {
- cachedTransform.localPosition = new Vector3(bone.worldX, bone.worldY, followZPosition ? 0f : cachedTransform.localPosition.z);
+ // Recommended setup: Use local transform properties if Spine GameObject is parent
+ if (thisTransform.parent == skeletonTransform) {
+ thisTransform.localPosition = new Vector3(bone.worldX, bone.worldY, followZPosition ? 0f : thisTransform.localPosition.z);
if (followBoneRotation) {
- Vector3 rotation = cachedTransform.localRotation.eulerAngles;
- cachedTransform.localRotation = Quaternion.Euler(rotation.x, rotation.y, bone.WorldRotationX * flipRotation);
+ Vector3 rotation = thisTransform.localRotation.eulerAngles;
+ thisTransform.localRotation = Quaternion.Euler(rotation.x, rotation.y, bone.WorldRotationX * flipRotation);
}
+ // For special cases: Use transform world properties if transform relationship is complicated
} else {
Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f));
if (!followZPosition)
- targetWorldPosition.z = cachedTransform.position.z;
+ targetWorldPosition.z = thisTransform.position.z;
- cachedTransform.position = targetWorldPosition;
+ thisTransform.position = targetWorldPosition;
if (followBoneRotation) {
- Vector3 rotation = skeletonTransform.rotation.eulerAngles;
-
- cachedTransform.rotation = Quaternion.Euler(rotation.x, rotation.y, skeletonTransform.rotation.eulerAngles.z + (bone.WorldRotationX * flipRotation));
+ Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
+ thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + (bone.WorldRotationX * flipRotation));
}
}
diff --git a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs
index 5305d2b35..6f7a01bc3 100644
--- a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs
+++ b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs
@@ -35,7 +35,7 @@ using UnityEngine;
[CustomEditor(typeof(BoneFollower))]
public class BoneFollowerInspector : Editor {
- private SerializedProperty boneName, skeletonRenderer, followZPosition, followBoneRotation;
+ SerializedProperty boneName, skeletonRenderer, followZPosition, followBoneRotation;
BoneFollower component;
bool needsReset;
@@ -47,18 +47,7 @@ public class BoneFollowerInspector : Editor {
component = (BoneFollower)target;
component.skeletonRenderer.Initialize(false);
}
-
- void FindRenderer () {
- if (skeletonRenderer.objectReferenceValue == null) {
- SkeletonRenderer parentRenderer = SkeletonUtility.GetInParent(component.transform);
-
- if (parentRenderer != null) {
- skeletonRenderer.objectReferenceValue = (UnityEngine.Object)parentRenderer;
- }
-
- }
- }
-
+
override public void OnInspectorGUI () {
if (needsReset) {
component.Reset();
@@ -68,7 +57,14 @@ public class BoneFollowerInspector : Editor {
}
serializedObject.Update();
- FindRenderer();
+ // FindRenderer()
+ if (skeletonRenderer.objectReferenceValue == null) {
+ SkeletonRenderer parentRenderer = SkeletonUtility.GetInParent(component.transform);
+
+ if (parentRenderer != null) {
+ skeletonRenderer.objectReferenceValue = (UnityEngine.Object)parentRenderer;
+ }
+ }
EditorGUILayout.PropertyField(skeletonRenderer);
@@ -81,8 +77,6 @@ public class BoneFollowerInspector : Editor {
serializedObject.Update();
}
-
-
EditorGUILayout.PropertyField(followBoneRotation);
EditorGUILayout.PropertyField(followZPosition);
} else {