[unity] Fixed Unity Timeline editor errors after Add Spine Animation State Clip Clip due to unset Animation Reference. Closes #1257.

This commit is contained in:
Harald Csaszar 2019-02-11 21:28:33 +01:00
parent 04e2dd835d
commit 1935d4a488

View File

@ -138,16 +138,16 @@ namespace Spine.Unity.Playables {
if (lastOneWeight != 0 && inputCount > 1) {
var fromClip = (ScriptPlayable<SpineAnimationStateBehaviour>)playable.GetInput(lastOneWeight - 1);
var fromClipData = fromClip.GetBehaviour();
fromAnimation = fromClipData.animationReference.Animation;
fromAnimation = fromClipData.animationReference != null ? fromClipData.animationReference.Animation : null;
fromClipTime = (float)fromClip.GetTime();
fromClipLoop = fromClipData.loop;
}
Animation toAnimation = clipData.animationReference.Animation;
Animation toAnimation = clipData.animationReference != null ? clipData.animationReference.Animation : null;
float toClipTime = (float)inputPlayableClip.GetTime();
float mixDuration = clipData.mixDuration;
if (!clipData.customDuration && fromAnimation != null) {
if (!clipData.customDuration && fromAnimation != null && toAnimation != null) {
mixDuration = spineComponent.AnimationState.Data.GetMix(fromAnimation, toAnimation);
}
@ -163,13 +163,16 @@ namespace Spine.Unity.Playables {
dummyAnimationState.ClearTracks();
fromTrack = dummyAnimationState.SetAnimation(0, fromAnimation, fromClipLoop);
fromTrack.AllowImmediateQueue();
if (toAnimation != null)
toTrack = dummyAnimationState.SetAnimation(0, toAnimation, clipData.loop);
}
// Update track times.
fromTrack.trackTime = fromClipTime;
if (toTrack != null) {
toTrack.trackTime = toClipTime;
toTrack.mixTime = toClipTime;
}
// Apply Pose
skeleton.SetToSetupPose();
@ -177,6 +180,7 @@ namespace Spine.Unity.Playables {
dummyAnimationState.Apply(skeleton);
} else {
skeleton.SetToSetupPose();
if (toAnimation != null)
toAnimation.PoseSkeleton(skeleton, toClipTime, clipData.loop);
}