• RuntimesUnity
  • 有關多個軌道動畫監聽的問題

您好,我現在遇到一個問題。我在Unity中設計遊戲時,有設定一名角色會執行多個軌道的動畫,我原本是寫如下所示
opponentAnimation = opponent.GetComponent<SkeletonAnimation>();
opponentAnimationState = opponentAnimation.AnimationState;
opponentAnimationState.Complete += OnSpineAnimationComplete;
......
opponentAnimation.AnimationState.SetAnimation(0, ..., true);
opponentAnimation.AnimationState.SetAnimation(1, ..., true);
opponentAnimation.AnimationState.SetAnimation(3, ..., true);

......
......
public void OnSpineAnimationComplete(TrackEntry trackEntry)
{
......
}
我發現這一角色,在不同軌道上的動畫完成時都有可能觸發這個OnSpineAnimationComplete函式,有辦法只確認第一個軌道上的主動畫是否完成,而不用監聽其他軌道的疊加動畫嗎?

感謝回覆

Related Discussions
...

您可以針對特定軌道設置監聽器,而不是針對整個 AnimationState 設置監聽器。這樣可以確保只有特定軌道上的動畫完成時才會觸發回調函數。以下是修改後的代碼示例:

opponentAnimation = opponent.GetComponent<SkeletonAnimation>();
opponentAnimationState = opponentAnimation.AnimationState;

// 只針對第一個軌道設置監聽器
TrackEntry trackEntry0 = opponentAnimation.AnimationState.SetAnimation(0, "animationName0", true);
trackEntry0.Complete += OnSpineAnimationComplete;

// 其他軌道的動畫設置
opponentAnimation.AnimationState.SetAnimation(1, "animationName1", true);
opponentAnimation.AnimationState.SetAnimation(3, "animationName3", true);

public void OnSpineAnimationComplete(TrackEntry trackEntry)
{
    // 這裡的代碼只會在第一個軌道上的動畫完成時執行
    Debug.Log("第一個軌道上的動畫已完成: " + trackEntry.Animation.Name);
}

這樣,OnSpineAnimationComplete 函數只會在第一個軌道上的動畫完成時被觸發,而不會被其他軌道上的動畫完成所觸發。