Unreal裏的動畫

Unreal裏的動畫這麼理解:

動畫資源:AnimSequence, AnimMontage, BlendSpace...  其中,AnimSequence是我們導入的最基礎的AnimClip,AnimMontage和BlendSpace都是在Unreal的Personal裏用AnimSequence進一步製作的。

動畫控制:AnimationBlueprint。 

AnimationBlueprint包含兩部分:Anim Graph和Event Graph。  

Anim Graph: 動畫狀態轉換(動畫狀態機)、動畫混合(支持簡單混合,目前還沒有強大的混合樹功能)。

Event Graph:可以自定義一些Event。或者處理某些AnimSequence、AnimMontage裏插入的某些Event。

Unreal將角色邏輯和動畫邏輯分開來處理,這樣子處理有他的道理,只不過用戶需要多瞭解Character和AnimInstance的通信機制。以CharacterBlueprint和AnimationBlueprint爲例。

用戶輸入控制行走:

CharacterBlueprint裏接受用戶輸入,由Character的MovementComponent得到Character的Speed。 而這個Speed是決定AnimationBlueprint裏Idle-Walk-Run的參數。AnimationBlueprint如何從CharacterBlueprint獲取信息呢?


其實看到了兩種模式,(1)Try Get Pawn Owner節點得到當前的Player,由Player可以得到Velocity設置給AnimBP的Speed; 

(2)另一個就是需要做類型轉換,將獲取的Character轉換爲我們的MyCharacter,也就是我們已經用到的CharacterBP類型,此時就能獲取MyCharacter 這個CharacterBP裏的成員,變量、函數、Event,只要有訪問權限,都能調用。

另外Try Get Pawn Owner節點可以換爲Get Owning Actor節點。Get Owning Actor獲取的是使用這個AnimationBlueprint的Actor。在這裏這兩個節點獲取的對象是相同的。


動畫狀態機裏一些動畫狀態的轉換條件由AnimationBlueprint的一些Variable控制。而這些Variable又經常受用戶輸入影響,也就是這些Variable的值需要從CharacterBlueprint獲取。 本質和前文的“用戶輸入控制行走”無差。


不用狀態機轉換,用Slot來控制:

需要製作AnimMontage,在AnimGraph裏將Slot連接到Final Animation Pose。那麼接下來不管是在AnimationBlueprint裏的Event Graph裏用Montage Play節點調用Montage,還是在CharacterBlueprint裏用Play Anim Montage節點調用Montage,都可行!

注意,但在CharacterBlueprint裏用PlayAnimMontage節點調用帶RootMotion的Montage時,播放時可能會出現角色只出現位移沒有播放相應動作的現象。 建議動畫的處理還是儘量放在AnimBlueprint裏。CharacterBlueprint只是告訴AnimBlueprint播放什麼動畫就好了。



完全不用AnimationBluerpint,直接在CharacterBlueprint裏用Play Animation節點調用最原始的AnimSequence

注意,Play Animation節點是可以在CharacterBlueprint裏用的,不過得注意去掉Context Sensitive。








發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章