こんにちは。いつもSpineにお世話になっております。
同フレーム内で2つのSetAnimationとAnimationState.Applyを行った結果が、Track0とそれ以外のTrackで異なることが分かりました。
public class _TestSpine : MonoBehaviour
{
SkeletonAnimation skeletonAnimation;
private void Start()
{
skeletonAnimation = GetComponent<SkeletonAnimation>();
// I'm just changing it to girl skin for the video, so I'll skip it on code.
SetSKin();
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Alpha1))
{
Debug.Log("TestKey:1");
skeletonAnimation.AnimationState.SetAnimation(0, "_BASE/Idle_nonBattle", true);
}
if (Input.GetKeyDown(KeyCode.Alpha2))
{
Debug.Log("TestKey:2");
skeletonAnimation.AnimationState.SetAnimation(0, "_BASE/Idle_nonBattle", true);
skeletonAnimation.AnimationState.Apply(skeletonAnimation.Skeleton);
skeletonAnimation.AnimationState.SetAnimation(0, "_BASE/Run_nonBattle", true);
skeletonAnimation.AnimationState.Apply(skeletonAnimation.Skeleton);
}
if (Input.GetKeyDown(KeyCode.Alpha3))
{
Debug.Log("TestKey:3");
skeletonAnimation.AnimationState.SetAnimation(1, "_BASE/Idle_nonBattle", true);
}
if (Input.GetKeyDown(KeyCode.Alpha4))
{
Debug.Log("TestKey:4");
skeletonAnimation.AnimationState.SetAnimation(1, "_BASE/Idle_nonBattle", true);
skeletonAnimation.AnimationState.Apply(skeletonAnimation.Skeleton);
skeletonAnimation.AnimationState.SetAnimation(1, "_BASE/Run_nonBattle", true);
skeletonAnimation.AnimationState.Apply(skeletonAnimation.Skeleton);
}
}
}
■例
Idleアニメーションを再生した後で、
Idleアニメーション、AnimationState.Apply、Runアニメーションを表示します。
Track0で再生した時は問題ありません。(動画前半。キー押下:1→2)
しかし、それ以外のTrackで再生すると、動画のように腕の振りが正しくアニメーションしません(動画後半。キー押下:3→4)
これはバグでしょうか?
また、現在のプロジェクトは
・メインのアニメーションをTrack0以外で再生する必要がある
・同一フレーム内でSetAnimationの指定がやり直されるケースが有る。その際Applyが行われる
といった仕様で作成しています。
この問題を解決するにはどうしたらよいでしょうか?