|
@@ -43,68 +43,61 @@ namespace Spine.Unity {
|
|
get { return skeletonRenderer; }
|
|
get { return skeletonRenderer; }
|
|
set {
|
|
set {
|
|
skeletonRenderer = value;
|
|
skeletonRenderer = value;
|
|
- Reset();
|
|
|
|
|
|
+ Initialize();
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
+
|
|
/// <summary>If a bone isn't set, boneName is used to find the bone.</summary>
|
|
/// <summary>If a bone isn't set, boneName is used to find the bone.</summary>
|
|
[SpineBone(dataField: "skeletonRenderer")]
|
|
[SpineBone(dataField: "skeletonRenderer")]
|
|
public String boneName;
|
|
public String boneName;
|
|
|
|
|
|
public bool followZPosition = true;
|
|
public bool followZPosition = true;
|
|
public bool followBoneRotation = true;
|
|
public bool followBoneRotation = true;
|
|
- public bool resetOnAwake = true;
|
|
|
|
|
|
+ [UnityEngine.Serialization.FormerlySerializedAs("resetOnAwake")]
|
|
|
|
+ public bool initializeOnAwake = true;
|
|
#endregion
|
|
#endregion
|
|
|
|
|
|
- [NonSerialized]
|
|
|
|
- public bool valid;
|
|
|
|
-
|
|
|
|
- [NonSerialized]
|
|
|
|
- public Bone bone;
|
|
|
|
|
|
+ [NonSerialized] public bool valid;
|
|
|
|
+ [NonSerialized] public Bone bone;
|
|
Transform skeletonTransform;
|
|
Transform skeletonTransform;
|
|
|
|
|
|
- public void HandleResetRenderer (SkeletonRenderer skeletonRenderer) {
|
|
|
|
- Reset();
|
|
|
|
|
|
+ public void Awake () {
|
|
|
|
+ if (initializeOnAwake) Initialize();
|
|
|
|
+ }
|
|
|
|
+
|
|
|
|
+ public void HandleRebuildRenderer (SkeletonRenderer skeletonRenderer) {
|
|
|
|
+ Initialize();
|
|
}
|
|
}
|
|
|
|
|
|
- public void Reset () {
|
|
|
|
|
|
+ public void Initialize () {
|
|
bone = null;
|
|
bone = null;
|
|
valid = skeletonRenderer != null && skeletonRenderer.valid;
|
|
valid = skeletonRenderer != null && skeletonRenderer.valid;
|
|
-
|
|
|
|
if (!valid) return;
|
|
if (!valid) return;
|
|
|
|
|
|
skeletonTransform = skeletonRenderer.transform;
|
|
skeletonTransform = skeletonRenderer.transform;
|
|
- skeletonRenderer.OnRebuild -= HandleResetRenderer;
|
|
|
|
- skeletonRenderer.OnRebuild += HandleResetRenderer;
|
|
|
|
|
|
+ skeletonRenderer.OnRebuild -= HandleRebuildRenderer;
|
|
|
|
+ skeletonRenderer.OnRebuild += HandleRebuildRenderer;
|
|
|
|
|
|
#if UNITY_EDITOR
|
|
#if UNITY_EDITOR
|
|
if (Application.isEditor)
|
|
if (Application.isEditor)
|
|
- DoUpdate();
|
|
|
|
|
|
+ LateUpdate();
|
|
#endif
|
|
#endif
|
|
}
|
|
}
|
|
|
|
|
|
void OnDestroy () {
|
|
void OnDestroy () {
|
|
if (skeletonRenderer != null)
|
|
if (skeletonRenderer != null)
|
|
- skeletonRenderer.OnRebuild -= HandleResetRenderer;
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- public void Awake () {
|
|
|
|
- if (resetOnAwake)
|
|
|
|
- Reset();
|
|
|
|
- }
|
|
|
|
-
|
|
|
|
- void LateUpdate () {
|
|
|
|
- DoUpdate();
|
|
|
|
|
|
+ skeletonRenderer.OnRebuild -= HandleRebuildRenderer;
|
|
}
|
|
}
|
|
|
|
|
|
- public void DoUpdate () {
|
|
|
|
|
|
+ public void LateUpdate () {
|
|
if (!valid) {
|
|
if (!valid) {
|
|
- Reset();
|
|
|
|
|
|
+ Initialize();
|
|
return;
|
|
return;
|
|
}
|
|
}
|
|
|
|
|
|
if (bone == null) {
|
|
if (bone == null) {
|
|
- if (boneName == null || boneName.Length == 0)
|
|
|
|
- return;
|
|
|
|
|
|
+ if (string.IsNullOrEmpty(boneName)) return;
|
|
|
|
+
|
|
bone = skeletonRenderer.skeleton.FindBone(boneName);
|
|
bone = skeletonRenderer.skeleton.FindBone(boneName);
|
|
if (bone == null) {
|
|
if (bone == null) {
|
|
Debug.LogError("Bone not found: " + boneName, this);
|
|
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;
|
|
Transform thisTransform = this.transform;
|
|
-
|
|
|
|
- // Recommended setup: Use local transform properties if Spine GameObject is parent
|
|
|
|
if (thisTransform.parent == skeletonTransform) {
|
|
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);
|
|
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 {
|
|
} else {
|
|
|
|
+ // For special cases: Use transform world properties if transform relationship is complicated
|
|
Vector3 targetWorldPosition = skeletonTransform.TransformPoint(new Vector3(bone.worldX, bone.worldY, 0f));
|
|
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;
|
|
thisTransform.position = targetWorldPosition;
|
|
|
|
|
|
if (followBoneRotation) {
|
|
if (followBoneRotation) {
|
|
Vector3 worldRotation = skeletonTransform.rotation.eulerAngles;
|
|
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);
|
|
}
|
|
}
|
|
}
|
|
}
|
|
-
|
|
|
|
}
|
|
}
|
|
}
|
|
}
|
|
|
|
|