UE Animation Note6
一、動畫通知
動畫通知(Animation Notifications)可創(chuàng)建同步到動畫序列(Animation Sequences)的可重復(fù)事件??梢允褂脛赢嬐ㄖ獊聿シ怕曇簦闪W踊蛘咛匦У?。
Notify僅通知一次。Notify State可以通知開始和結(jié)束,是一個狀態(tài),等價于兩個Notify。
骨架通知(Skeleton Notifies)是在動畫編輯器中自定義通知,保存在骨架資產(chǎn)上,可用作Anim Instance與動畫藍圖中的事件。
通知和通知狀態(tài)也可以自定義,可具有預(yù)定義的藍圖邏輯,不僅提高復(fù)用性,還可以拓展和創(chuàng)建不同的通知模板。
二、根運動
根運動(Root Motion)就是使用根骨骼(root)的運動數(shù)據(jù)驅(qū)動角色移動。
通俗來講,一般都是在角色移動時播放動畫,而根運動就是在播放動畫時讓角色移動。
本質(zhì)來講,就是將根骨骼的運動數(shù)據(jù)應(yīng)用到Actor的Root Component上。
三、狀態(tài)機
狀態(tài)機(State Machines)可以在狀態(tài)(State)中定義要播放的動畫,并創(chuàng)建過渡規(guī)則(Transition Rule)控制狀態(tài)的切換。
四、過渡規(guī)則
勾選Transition面板下的Automatic Rule Based on Sequence Player in State選項就可以讓動畫播放完畢后自動轉(zhuǎn)換。
等價于在rule中直接編寫:

過渡規(guī)則可以共享,Transition Rule Sharing中Promote To Shared可以創(chuàng)建共享規(guī)則,Use Shared即可使用。
Blend Logic中可選擇慣性化(Inertialization),將不再計算原姿勢,而是直接向目標(biāo)動畫過渡。相反,傳統(tǒng)混合在過渡期間會計算源姿勢和目標(biāo)姿勢,將其組合成混合姿勢。
Blend Logic 還可以自定義(custom)。
注意,使用慣性混合(Inertial blending),需要在動畫圖表(AnimGraph)中添加一個慣性化(Inertialization)節(jié)點,位于慣性混合請求源之后的位置。
Blend Settings中的Duration可調(diào)節(jié)混合時長。
動畫序列A->混合->動畫序列B
Mode中可以選擇Blend插值函數(shù)。如果選擇custom,就可以使用Custom Blend Curve對Blend Mode進行自定義。
Blend是對兩個動畫的“加權(quán)平均”,比如A動畫權(quán)重為20%,B動畫則為80%。而Blend Profile中可單獨配置骨骼權(quán)重,從而使該骨架的某骨骼Blend的速度比其他骨骼更快或更慢,也就是單獨改變骨骼的混合速度。
過渡規(guī)則中還可以在通知(Notifications)中添加過渡事件(Transition Event)。
五、導(dǎo)管
普通轉(zhuǎn)換用于狀態(tài)之間的一對一轉(zhuǎn)換,而導(dǎo)管(Conduit)可用于一對多、多對一或多對多的轉(zhuǎn)換。
導(dǎo)管自身包含轉(zhuǎn)換規(guī)則,但大部分情況下只是啟用可以進入轉(zhuǎn)換(Can Enter Transition),然后在進出導(dǎo)管的各個轉(zhuǎn)換上創(chuàng)建轉(zhuǎn)換規(guī)則邏輯。

官方文檔中的例子,使用導(dǎo)管分散狀態(tài)機的進入點。然后,可以使用導(dǎo)管中的轉(zhuǎn)換,選擇某個狀態(tài)作為默認狀態(tài)開始。(需要在狀態(tài)機細節(jié)面板中啟用允許導(dǎo)管進入狀態(tài)(Allow Conduit Entry States))

可將幾個狀態(tài)共同過渡規(guī)則“提升”到到導(dǎo)管的過渡規(guī)則上,再分別指定從導(dǎo)管到不同狀態(tài)的不同過渡規(guī)則,可使?fàn)顟B(tài)機更簡潔直觀。
如侵刪,歡迎評論指正。
參考來源:
https://docs.unrealengine.com/5.2/zh-CN/state-machines-in-unreal-engine/
https://www.bilibili.com/video/BV12f4y1r71N/?p=29&spm_id_from=pageDriver&vd_source=46b59e073cc898a338339512dcee8431