diff --git a/spine-unity/Assets/spine-unity/BoneFollower.cs b/spine-unity/Assets/spine-unity/BoneFollower.cs
index e43622c3f..a5a1af424 100644
--- a/spine-unity/Assets/spine-unity/BoneFollower.cs
+++ b/spine-unity/Assets/spine-unity/BoneFollower.cs
@@ -43,68 +43,61 @@ namespace Spine.Unity {
get { return skeletonRenderer; }
set {
skeletonRenderer = value;
- Reset();
+ Initialize();
}
}
+
/// 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;
+ [UnityEngine.Serialization.FormerlySerializedAs("resetOnAwake")]
+ public bool initializeOnAwake = true;
#endregion
- [NonSerialized]
- public bool valid;
-
- [NonSerialized]
- public Bone bone;
+ [NonSerialized] public bool valid;
+ [NonSerialized] public Bone bone;
Transform skeletonTransform;
- public void HandleResetRenderer (SkeletonRenderer skeletonRenderer) {
- Reset();
+ public void Awake () {
+ if (initializeOnAwake) Initialize();
}
- public void Reset () {
+ public void HandleRebuildRenderer (SkeletonRenderer skeletonRenderer) {
+ Initialize();
+ }
+
+ public void Initialize () {
bone = null;
valid = skeletonRenderer != null && skeletonRenderer.valid;
-
if (!valid) return;
skeletonTransform = skeletonRenderer.transform;
- skeletonRenderer.OnRebuild -= HandleResetRenderer;
- skeletonRenderer.OnRebuild += HandleResetRenderer;
+ skeletonRenderer.OnRebuild -= HandleRebuildRenderer;
+ skeletonRenderer.OnRebuild += HandleRebuildRenderer;
#if UNITY_EDITOR
if (Application.isEditor)
- DoUpdate();
+ LateUpdate();
#endif
}
void OnDestroy () {
if (skeletonRenderer != null)
- skeletonRenderer.OnRebuild -= HandleResetRenderer;
+ skeletonRenderer.OnRebuild -= HandleRebuildRenderer;
}
- public void Awake () {
- if (resetOnAwake)
- Reset();
- }
-
- void LateUpdate () {
- DoUpdate();
- }
-
- public void DoUpdate () {
+ public void LateUpdate () {
if (!valid) {
- Reset();
+ Initialize();
return;
}
if (bone == null) {
- if (boneName == null || boneName.Length == 0)
- return;
+ if (string.IsNullOrEmpty(boneName)) return;
+
bone = skeletonRenderer.skeleton.FindBone(boneName);
if (bone == null) {
Debug.LogError("Bone not found: " + boneName, this);
@@ -112,33 +105,23 @@ namespace Spine.Unity {
}
}
- Skeleton skeleton = skeletonRenderer.skeleton;
- float flipRotation = (skeleton.flipX ^ skeleton.flipY) ? -1f : 1f;
Transform thisTransform = this.transform;
-
- // Recommended setup: Use local transform properties if Spine GameObject is parent
if (thisTransform.parent == skeletonTransform) {
+ // Recommended setup: Use local transform properties if Spine GameObject is the immediate parent
thisTransform.localPosition = new Vector3(bone.worldX, bone.worldY, followZPosition ? 0f : thisTransform.localPosition.z);
-
- if (followBoneRotation) {
- 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
+ if (followBoneRotation) thisTransform.localRotation = Quaternion.Euler(0f, 0f, bone.WorldRotationX);
+
} else {
+ // For special cases: Use transform world properties if transform relationship is complicated
Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f));
- if (!followZPosition)
- targetWorldPosition.z = thisTransform.position.z;
-
+ if (!followZPosition) targetWorldPosition.z = thisTransform.position.z;
thisTransform.position = targetWorldPosition;
if (followBoneRotation) {
Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
- thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + (bone.WorldRotationX * flipRotation));
+ thisTransform.rotation = Quaternion.Euler(worldRotation.x, worldRotation.y, skeletonTransform.rotation.eulerAngles.z + bone.WorldRotationX);
}
}
-
}
}
diff --git a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs
index f81af9955..44221347e 100644
--- a/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs
+++ b/spine-unity/Assets/spine-unity/Editor/BoneFollowerInspector.cs
@@ -52,8 +52,8 @@ namespace Spine.Unity.Editor {
override public void OnInspectorGUI () {
if (needsReset) {
- component.Reset();
- component.DoUpdate();
+ component.Initialize();
+ component.LateUpdate();
needsReset = false;
SceneView.RepaintAll();
}
@@ -89,17 +89,17 @@ namespace Spine.Unity.Editor {
if (serializedObject.ApplyModifiedProperties() ||
(UnityEngine.Event.current.type == EventType.ValidateCommand && UnityEngine.Event.current.commandName == "UndoRedoPerformed")
) {
- component.Reset();
+ component.Initialize();
}
}
public static T GetInParent (Transform origin) where T : Component {
#if UNITY_4_3
Transform parent = origin.parent;
- while(parent.GetComponent() == null){
- parent = parent.parent;
- if(parent == null)
- return default(T);
+ while (parent.GetComponent() == null) {
+ parent = parent.parent;
+ if(parent == null)
+ return default(T);
}
return parent.GetComponent();