在許多地方,都需要用到動畫融合,unity的新版動畫系統已經能夠很方便的進行動畫融合,那么使用spine的動畫狀態機的情況下,如何來進行動畫融合呢?
官方有兩種方案,一種是使用混合動作實現,另一種是使用spine的動畫狀態機實現,這里講解一下狀態機的實現:
1 public class cartoonCombine : MonoBehaviour { 2 3 SkeletonAnimation skeletonAnimation; 4 AnimationStateData stateData; 5 Spine.AnimationState state; 6 public float mixTime = 0.5f; 7 public float mixTime2 = 0.5f; 8 void Start () { 9 10 skeletonAnimation = GetComponent<SkeletonAnimation>(); 11 state = skeletonAnimation.AnimationState; 12 //獲取狀態機動畫數據 13 stateData = skeletonAnimation.SkeletonDataAsset.GetAnimationStateData(); 14 15 //設置動畫混合,第一個參數是 當前動畫,第二參數是下一個動畫,第三個參數是從當前動畫過度到下一個動畫所需時間 16 stateData.SetMix("walk", "run", mixTime); 17 stateData.SetMix("run", "walk", mixTime2); 18 19 skeletonAnimation.AnimationState.SetAnimation(0, "walk", true); 20 21 } 22 23 void Update () { 24 25 if (Input.GetKeyDown(KeyCode.A)) 26 { 27 skeletonAnimation.AnimationState.SetAnimation(0, "run", true); 28 } 29 30 if (Input.GetKeyDown(KeyCode.D)) 31 { 32 33 skeletonAnimation.AnimationState.SetAnimation(0, "walk", true); 34 } 35 }
將該腳本掛到一個掛有 SkeletonAnimation 組件的物體上,需要確保 SkeletonAnimation的Spine資源里面有"walk" 和"run"這兩個動畫,否則會出錯,然后在運行狀態下查看動畫融合的效果。