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