1. 程式人生 > 其它 >【虛幻】用動畫曲線來驅動角色運動,實現最完美的運動方式——偽Root Motion

【虛幻】用動畫曲線來驅動角色運動,實現最完美的運動方式——偽Root Motion

在虛幻引擎中實現由曲線驅動角色運動的偽Root Motion的運動方式

轉載請註明出處:http://www.cnblogs.com/shamoyuu/p/counterfeit_root_motion.html

一、角色運動分類

在虛幻或Unity3D中,角色的運動一般有2種方法來驅動:

1是直接(或間接)修改角色座標,然後計算上一幀和這一幀之間的距離差來算出速度,然後用速度來選擇播放哪個動畫(0=idle,300=walk,600=run)。

2是Root Motion,由動畫驅動。在動畫師做的動畫中,角色骨骼的root節點就自帶位移,然後遊戲引擎獲取到這些位移,以此來改變角色在遊戲中的位置。

二、各自優缺點

1優點是實現簡單,可控性高,對聯機的支援足夠好。缺點就是簡單,如果是步履蹣跚的走法,因為移動速度不恆定,會滑步(常見喪屍、老人之類的慢走)。

2優點是完全不會滑步,動畫裡怎麼移動,遊戲裡就會怎麼移動。缺點就是實現複雜,可控性差,對聯機支援不夠(無法預測下一幀時角色的位置),網路差的時候會很糟糕。

三、動畫曲線驅動的偽Root Motion

這種方式的移動還是交給程式碼(MovementComponent),但是它的移動速度卻由動畫曲線來控制,這樣就可以很好地整合前面兩種移動方式的優點,也避免了一些它們的缺點。

可以看到這兩個動畫(一個步履蹣跚,速度時快時慢,而且左右搖晃,另一個轉來轉去),雖然它們不是Root Motion,但是無論是移動還是旋轉,卻都沒有絲毫滑步現象。

實現起來其實很簡單

首先要把Root Motion中Root的位移旋轉等資訊轉換成曲線,這裡使用一個外掛Root Motion Extractor,去年的時候Epic免費送過,沒有的話就自己想辦法了。

轉換很簡單,把SourceFolder和TargetFolder選一下,然後所有選項都打鉤,然後點轉換就好了,唯一的兩個小問題就是,首先這個動畫不能是曲線動畫(得是3dmax裡做的那種常規的動畫),其次Root Motion的動畫資源裡要勾選“啟用根運動”。

這裡就是轉換好之後的InPlace動畫資源,可以看到裡面有很多的曲線,看名字就應該知道都是幹啥的了。

需要注意的是,這裡轉換完成之後,最好儲存重啟一下工程,不然曲線資料可能獲取不到。

然後這樣就可以獲取到當前動畫曲線的float值了,最後就是簡單把它放到Tick裡

在每一幀獲取曲線的值,然後設定對應的屬性就好了。

圖裡的-95和270是網格預設的旋轉和位置。

最後,就是修改動畫的邏輯,動畫的不能再由Speed來決定,而是應該交給按鍵axis值。

完結,散花