延續昨天的 Dodge 功能,今天要為角色加上 閃避動畫,並利用 Root Motion 直接控制角色位移,省去額外調整速度與位移的麻煩。
在 StartDodge()
裡我額外加了一行:
GetWorldTimerManager().ClearTimer(DodgeTimerHandle);
這樣可以避免 Timer 重複設定造成衝突。
這裡我使用的是 UE5.6 Template 內建的 AM_Dash Animation Montage。
如果要改成自己的閃避動畫,需要先在 Animation Sequence 中勾選 Enable Root Motion,再轉成 Montage 來使用。
噢!還有我在 Do Dodge 加了 Input 來使用動畫的長度作為閃避持續時間:
void AiThome30daysCharacter::DoDodge(UAnimMontage* AnimMontage, float DurationOffset)
{
DodgeDuration = AnimMontage->GetPlayLength() + DurationOffset;
在 .h 也要做修改
virtual void DoDodge(UAnimMontage* AnimMontage, float DurationOffset);
下面是就是簡單的接起來
如果 bIsDodging 等於 true,做一次播放動畫並覆蓋目前的動作動畫。
如果 bIsDodging 等於 false,重製 Do Once。
完成後角色就能順暢地播放閃避動畫,並透過 Root Motion 自然帶動角色移動。