在Unreal內有三種撥放動作的方法,AnimationBlueprint就是其中一種。(名字太長簡稱ABP)
創建ABP後可以看到Event Graph跟Anim Graph兩個視窗,一個是Even的t一個是動畫的編輯器。
首先Anim Graph類是於unity的Animator,每個AnimGraph中一定會有一個Final Animation Pose在裡面,這個是動畫最終呈現的節點。
在這之前就依照自己的喜好來混合。
包含上下半身的移動,校準的的動作等等。
高級版的動作就如右圖的感覺一樣
先從簡單的範例開始,在AnimGraph內右鍵一個State Machine(狀態機),這個狀態機就如同unity內的Animator。
創建好後將狀態機連到Final Pose,最簡單的ABP就完成了。
點進新創的狀態機內開始編輯State,Entry是開頭會無條件進入State內。
但是每個State連接的時候都會連接著一個判斷式,稱為Transition。
在State內部將動畫編輯後輸出,最後就會輸到FinalAnimationPose那邊把動作演示出來。
狀態機內放的就是提前準備好的動畫素材,或是想要再放一層狀態機也可以。
這邊要特別提到BlendSpace這個Node,將檔案放進來時可以看到會有兩個input的輸入口,根據輸入值就會顯示混合出來的動作
※Speed是自行創建的參數,這個參數設定跟用法在EventGraph再說明
State設定好之後就是設定Transition了,點兩下進到Transition後可以看到一個Result這節點,只要匯入的值等同於Ture就會啟動這個Transition。
這個部分就可以自定義參數以及利用現有的節點來製作判斷式。
再Transition中有三個時間點可以匯出成Event來用,Entered, Left and Fully Blended這三個,取完名字之後就可以調用了。
這邊是用Event,一離開狀態就把參數給取消,這樣程式那邊就省下一個功夫了
使用自定義的參數的參考如下
使用bool值的話可以直接接上Result,其他參數的話就需要再加上判斷式。
如果有負數判斷式的話就可以用OR(或者)或ADD(包含)來追加
如果要判斷動畫是否播完的話,就可以用下面這個範例。
要注意判斷的數值是指動畫剩餘的秒數,如果動畫本身很短的話這數值本身就會很小。
還有AnimGraph時也有提到,狀態機切換時也有觸發時間點,這些可以運用來做一些原本AnimationBlueprint中沒有的功能。
例如隨機撥放3種以上的Idle動作。(現有的功能只能提供兩個隨機)
下圖的方法就是利用開始的時間點隨機產生0~2的整數,最後再狀態機內用
Blend Space呈現出來。
還有AnimGraph時也有提到,狀態機切換時也有觸發時間點,這些可以運用來做一些原本AnimationBlueprint中沒有的功能。
例如隨機撥放3種以上的Idle動作。(現有的功能只能提供兩個隨機)
下圖的方法就是利用開始的時間點隨機產生0~2的整數,最後再狀態機內用
Blend Space呈現出來。
Layer Blend是一個新的概念所以要特別說明。
首先要先知道自己的骨頭架構。
這樣才能知道自己要blend到個程度去。
Bone Name是Blend的骨頭位置,Blend Depth是混合的權重跟深度
Layer Blend是一個新的概念所以要特別說明。
首先要先知道自己的骨頭架構。
這樣才能知道自己要blend到個程度去。
Bone Name是Blend的骨頭位置,Blend Depth是混合的權重跟深度
首先混合Peivis這個骨頭,他會混合這跟骨頭下的所有骨頭,權重比是(BlendWeights/BlendDepth ) 1,所以混合了還是只有攻擊動作。
※Blend Depth的數值為0的話,默認為1
下半身也被混合到了,所以要把他刪除回來,把大腿的骨頭的深度給-1回去,這時候大腿骨頭以下的骨頭就不算再混合範圍內了。
下半身的動作也進來了,但是整體的動作像是完全切開的,需要權重上再調整。
把Blend Depth的深度調整為4,上半身的動作就變得比較流暢了。
4的意思是把權重切成4分並且隨著骨頭的階層提高,最後階層的權重階為1。