diff --git a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs index 4882086f3..4a098510f 100644 --- a/spine-tk2d/Assets/Spine/SkeletonAnimation.cs +++ b/spine-tk2d/Assets/Spine/SkeletonAnimation.cs @@ -60,7 +60,9 @@ public class SkeletonAnimation : SkeletonComponent { } override public void Initialize () { - base.Initialize(); // Call overridden method to initialize the skeleton. + if (Initialized) return; + + base.Initialize(); state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData()); if (_animationName != null && _animationName.Length > 0) state.SetAnimation(0, _animationName, loop); diff --git a/spine-tk2d/Assets/Spine/SkeletonComponent.cs b/spine-tk2d/Assets/Spine/SkeletonComponent.cs index 73a6b6b67..950f1a72d 100644 --- a/spine-tk2d/Assets/Spine/SkeletonComponent.cs +++ b/spine-tk2d/Assets/Spine/SkeletonComponent.cs @@ -58,6 +58,16 @@ public class SkeletonComponent : MonoBehaviour { private List submeshMaterials = new List(); private List submeshes = new List(); + /// False if Initialize needs to be called. + public bool Initialized { + get { + if (skeletonDataAsset == null) return true; + SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false); + if (skeletonData == null) return true; + return skeleton != null && skeleton.Data == skeletonData; + } + } + public virtual void Clear () { meshFilter.sharedMesh = null; DestroyImmediate(mesh); @@ -69,6 +79,8 @@ public class SkeletonComponent : MonoBehaviour { } public virtual void Initialize () { + if (Initialized) return; + meshFilter = GetComponent(); mesh1 = newMesh(); mesh2 = newMesh(); diff --git a/spine-unity/Assets/Spine/SkeletonAnimation.cs b/spine-unity/Assets/Spine/SkeletonAnimation.cs index 89f094a85..9e266f5a1 100644 --- a/spine-unity/Assets/Spine/SkeletonAnimation.cs +++ b/spine-unity/Assets/Spine/SkeletonAnimation.cs @@ -60,8 +60,10 @@ public class SkeletonAnimation : SkeletonComponent { } override public void Initialize () { - base.Initialize(); // Call overridden method to initialize the skeleton. - + if (Initialized) return; + + base.Initialize(); + state = new Spine.AnimationState(skeletonDataAsset.GetAnimationStateData()); if (_animationName != null && _animationName.Length > 0) state.SetAnimation(0, _animationName, loop); } diff --git a/spine-unity/Assets/Spine/SkeletonComponent.cs b/spine-unity/Assets/Spine/SkeletonComponent.cs index c6540ce99..aef349f06 100644 --- a/spine-unity/Assets/Spine/SkeletonComponent.cs +++ b/spine-unity/Assets/Spine/SkeletonComponent.cs @@ -57,6 +57,16 @@ public class SkeletonComponent : MonoBehaviour { private Material[] sharedMaterials = new Material[0]; private List submeshMaterials = new List(); private List submeshes = new List(); + + /// False if Initialize needs to be called. + public bool Initialized { + get { + if (skeletonDataAsset == null) return true; + SkeletonData skeletonData = skeletonDataAsset.GetSkeletonData(false); + if (skeletonData == null) return true; + return skeleton != null && skeleton.Data == skeletonData; + } + } public virtual void Clear () { meshFilter.sharedMesh = null; @@ -69,6 +79,8 @@ public class SkeletonComponent : MonoBehaviour { } public virtual void Initialize () { + if (Initialized) return; + meshFilter = GetComponent(); mesh1 = newMesh(); mesh2 = newMesh();