【虛幻】用動畫曲線來驅動角色運動,實現最完美的運動方式——偽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值。

 

完結,散花


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM