diff --git a/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs b/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs index a145d2150..4f327461e 100644 --- a/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs +++ b/spine-unity/Assets/Spine Examples/Scripts/SpineGauge.cs @@ -56,7 +56,7 @@ namespace Spine.Unity.Examples { if (skeletonRenderer == null) return; var skeleton = skeletonRenderer.skeleton; if (skeleton == null) return; - fillAnimation.Animation.PoseSkeleton(skeleton, percent); + fillAnimation.Animation.Apply(skeleton, 0, percent, false, null, 1f, MixBlend.Setup, MixDirection.In); skeleton.Update(Time.deltaTime); skeleton.UpdateWorldTransform(); } diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonAnimationInspector.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonAnimationInspector.cs index 4f9d5d189..94b56a756 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonAnimationInspector.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonAnimationInspector.cs @@ -55,38 +55,26 @@ namespace Spine.Unity.Editor { if (!TargetIsValid) return; bool sameData = SpineInspectorUtility.TargetsUseSameData(serializedObject); - if (multi) { - foreach (var o in targets) - TrySetAnimation(o as SkeletonAnimation, multi); - - EditorGUILayout.Space(); - if (!sameData) { - EditorGUILayout.DelayedTextField(animationName); - } else { - EditorGUI.BeginChangeCheck(); - EditorGUILayout.PropertyField(animationName); - wasAnimationNameChanged |= EditorGUI.EndChangeCheck(); // Value used in the next update. - } - EditorGUILayout.PropertyField(loop); - EditorGUILayout.PropertyField(timeScale); - foreach (var o in targets) { - var component = o as SkeletonAnimation; - component.timeScale = Mathf.Max(component.timeScale, 0); - } - } else { - TrySetAnimation(target as SkeletonAnimation, multi); + foreach (var o in targets) + TrySetAnimation(o as SkeletonAnimation, multi); + wasAnimationNameChanged = false; - EditorGUILayout.Space(); + EditorGUILayout.Space(); + if (!sameData) { + EditorGUILayout.DelayedTextField(animationName); + } else { EditorGUI.BeginChangeCheck(); EditorGUILayout.PropertyField(animationName); wasAnimationNameChanged |= EditorGUI.EndChangeCheck(); // Value used in the next update. - EditorGUILayout.PropertyField(loop, LoopLabel); - EditorGUILayout.PropertyField(timeScale, TimeScaleLabel); - var component = (SkeletonAnimation)target; - component.timeScale = Mathf.Max(component.timeScale, 0); - EditorGUILayout.Space(); } - + EditorGUILayout.PropertyField(loop, LoopLabel); + EditorGUILayout.PropertyField(timeScale, TimeScaleLabel); + foreach (var o in targets) { + var component = o as SkeletonAnimation; + component.timeScale = Mathf.Max(component.timeScale, 0); + } + EditorGUILayout.Space(); + if (!isInspectingPrefab) { if (requireRepaint) { SceneView.RepaintAll(); @@ -113,7 +101,9 @@ namespace Spine.Unity.Editor { Spine.Animation animationToUse = skeleton.Data.FindAnimation(animationName.stringValue); if (!Application.isPlaying) { - if (animationToUse != null) animationToUse.PoseSkeleton(skeleton, 0f); + if (animationToUse != null) { + skeletonAnimation.AnimationState.SetAnimation(0, animationToUse, loop.boolValue); + } skeleton.UpdateWorldTransform(); skeletonAnimation.LateUpdate(); requireRepaint = true; @@ -123,12 +113,10 @@ namespace Spine.Unity.Editor { else state.ClearTrack(0); } - - wasAnimationNameChanged = false; } // Reflect animationName serialized property in the inspector even if SetAnimation API was used. - if (!multi && Application.isPlaying) { + if (Application.isPlaying) { TrackEntry current = skeletonAnimation.AnimationState.GetCurrent(0); if (current != null) { if (skeletonAnimation.AnimationName != animationName.stringValue) diff --git a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonBaker.cs b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonBaker.cs index 8a6ddb540..4f1215463 100644 --- a/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonBaker.cs +++ b/spine-unity/Assets/Spine/Editor/spine-unity/Editor/SkeletonBaker.cs @@ -831,7 +831,7 @@ namespace Spine.Unity.Editor { Skeleton skeleton = bone.Skeleton; bool inheritRotation = bone.Data.TransformMode.InheritsRotation(); - animation.PoseSkeleton(skeleton, 0); + animation.Apply(skeleton, 0, 0, false, null, 1f, MixBlend.Setup, MixDirection.In); skeleton.UpdateWorldTransform(); float duration = animation.Duration; @@ -859,7 +859,7 @@ namespace Spine.Unity.Editor { if (i == steps) currentTime = duration; - animation.PoseSkeleton(skeleton, currentTime, true); + animation.Apply(skeleton, 0, currentTime, true, null, 1f, MixBlend.Setup, MixDirection.In); skeleton.UpdateWorldTransform(); int pIndex = listIndex - 1; diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs index 9d41ffae4..f2eed8cbe 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Components/SkeletonAnimation.cs @@ -158,24 +158,23 @@ namespace Spine.Unity { if (!string.IsNullOrEmpty(_animationName)) { var animationObject = skeletonDataAsset.GetSkeletonData(false).FindAnimation(_animationName); if (animationObject != null) { - animationObject.PoseSkeleton(skeleton, 0f); - skeleton.UpdateWorldTransform(); - + state.SetAnimation(0, animationObject, loop); #if UNITY_EDITOR - if (Application.isPlaying) { - #endif - - // In Unity Editor edit mode, make this block not run. - state.SetAnimation(0, animationObject, loop); - - #if UNITY_EDITOR - } + if (!Application.isPlaying) + Update(0f); #endif } } } void Update () { + #if UNITY_EDITOR + if (!Application.isPlaying) { + Update(0f); + return; + } + #endif + Update(Time.deltaTime); } 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 a0976b2fe..7be3831ff 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 @@ -92,12 +92,14 @@ namespace Spine.Unity { if (!Application.isPlaying) { skeleton.scaleX = this.initialFlipX ? -1 : 1; skeleton.scaleY = this.initialFlipY ? -1 : 1; - + + state.ClearTrack(0); skeleton.SetToSetupPose(); - if (!string.IsNullOrEmpty(startingAnimation)) - skeleton.PoseWithAnimation(startingAnimation, 0f, false); + if (!string.IsNullOrEmpty(startingAnimation)) { + state.SetAnimation(0, startingAnimation, startingLoop); + Update(0f); + } } - } } else { // Under some circumstances (e.g. sometimes on the first import) OnValidate is called @@ -181,6 +183,13 @@ namespace Spine.Unity { } public virtual void Update () { + #if UNITY_EDITOR + if (!Application.isPlaying) { + Update(0f); + return; + } + #endif + if (freeze) return; Update(unscaledTime ? Time.unscaledDeltaTime : Time.deltaTime); } @@ -273,22 +282,11 @@ namespace Spine.Unity { if (!string.IsNullOrEmpty(startingAnimation)) { var animationObject = skeletonDataAsset.GetSkeletonData(false).FindAnimation(startingAnimation); if (animationObject != null) { - animationObject.PoseSkeleton(skeleton, 0f); - skeleton.UpdateWorldTransform(); - + state.SetAnimation(0, animationObject, startingLoop); #if UNITY_EDITOR - if (Application.isPlaying) { + if (!Application.isPlaying) + Update(0f); #endif - - // Make this block not run in Unity Editor edit mode. - state.SetAnimation(0, animationObject, startingLoop); - - #if UNITY_EDITOR - } - #endif - } - else { - startingAnimation = string.Empty; } } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Timeline/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Timeline/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs index 9e8604bd4..1aba237e4 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Timeline/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/Modules/Timeline/SpineAnimationState/SpineAnimationStateMixerBehaviour.cs @@ -181,7 +181,7 @@ namespace Spine.Unity.Playables { } else { skeleton.SetToSetupPose(); if (toAnimation != null) - toAnimation.PoseSkeleton(skeleton, toClipTime, clipData.loop); + toAnimation.Apply(skeleton, 0, toClipTime, clipData.loop, null, 1f, MixBlend.Setup, MixDirection.In); } } diff --git a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs index 9c1e958f9..ecfb21fcd 100644 --- a/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs +++ b/spine-unity/Assets/Spine/Runtime/spine-unity/SkeletonExtensions.cs @@ -601,25 +601,6 @@ namespace Spine { } } - /// - /// Shortcut for posing a skeleton at a specific time. Time is in seconds. (frameNumber / 30f) will give you seconds. - /// If you need to do this often, you should get the Animation object yourself using skeleton.data.FindAnimation. and call Apply on that. - /// The skeleton to pose. - /// The name of the animation to use. - /// The time of the pose within the animation. - /// Wraps the time around if it is longer than the duration of the animation. - public static void PoseWithAnimation (this Skeleton skeleton, string animationName, float time, bool loop = false) { - // Fail loud when skeleton.data is null. - Spine.Animation animation = skeleton.data.FindAnimation(animationName); - if (animation == null) return; - animation.Apply(skeleton, 0, time, loop, null, 1f, MixBlend.Setup, MixDirection.In); - } - - /// Pose a skeleton according to a given time in an animation. This is the simplified version of Animation.Apply(skeleton). - public static void PoseSkeleton (this Animation animation, Skeleton skeleton, float time, bool loop = false) { - animation.Apply(skeleton, 0, time, loop, null, 1f, MixBlend.Setup, MixDirection.In); - } - /// Resets Skeleton parts to Setup Pose according to a Spine.Animation's keyed items. public static void SetKeyedItemsToSetupPose (this Animation animation, Skeleton skeleton) { animation.Apply(skeleton, 0, 0, false, null, 0, MixBlend.Setup, MixDirection.Out);