[Unity]Root Motion深度解析


Copyright notice: This article is an original article and follows CC 4.0 BY-NC-ND Copyright agreement. If you want to reprint this article, please attach the original source link and this statement.   Source link: https://www.v2know.com/MainPage/PreView/234

直接測試

 

情況 Bake into Pose Apply Root Motion 是否勾選LoopTime 動畫名稱 狀況 子物體(指joint_HipMaster) 父物體
01 不勾選 勾選 YES Move_Forward 位置、角度都變化(實時) 位置、角度都變化(實時) 位置、角度改變
02 不勾選 不勾選 YES Move_Forward 原地播放前進動畫 位置、角度都變化(實時) 位置、角度不變
03 勾選 不勾選 YES Move_Forward 原地播放前進動畫(感覺步子邁得更大) 位置、角度都變化(實時) 位置、角度不變
04 勾選 勾選 YES Move_Forward 原地播放前進動畫(感覺步子邁得更大) 位置、角度都變化(實時) 位置、角度不變

 

Tips:

【子物體變動的位置和角度都是相對父物體的】

【在不斷的Loop當中,位置和角度一直會重置】

 

可以發現,當勾選了全部Bake into Pose之后,無論你勾不勾選Apply Root Motion,動畫始終重復播放,03和04的情況一模一樣。

 

這顯然不是我們期望的結果,

但像01的以跳幀的方式閃現到另一個位置,並且走路還慢慢往下陷,顯然也不是我們想要的。

 

這里有個非常嚴重的問題,直到勾選Bake才發現。

02的情況,實際上“原地播放前進動畫”指的是真的原地踏步,但原始Anim是有位移的,

換句話說,人物有跨出一條腿的動作,並實現了重心位移,

但是,02是沒有重心位移的,重心一直固定在原地,只看到兩條腿在動。

重心不變

 

 

 

 

可以理解Bake into Pose實際上就是“烘焙成姿勢”,姿勢將是子物體的實時運動,不會影響父物體的位置和方向。

——這就意味着,在父物體上的碰撞體,會一直在原地不動。(靈魂出竅)

BackToPos

解決方案是不要勾選Bake into Pose,一個都不要勾選,

NoChecked

然后,碰撞體就能跟着走了。

ColiMove

由此可見這真的是一個Pose,它屬於Body Transform,身體產生的動作,

RedGreen

紅燈是提醒你不要勾選Bake into Pose。

 

 

這里的Bake into Pose 也就是將變換設置為Body Transform(pose)的一部分。我們可以這樣去理解,如果是設置成Body Transform(pose)的話,就相當這些變換是屬於動畫本身的一部分,也就是說,不管設不設置Apply Root Motion,在場景中,我們都會看到模型位置或角度的變化。

(因為Body Transform不影響模型實際的位置和角度,所以這里只是純粹的動畫效果,模型的位置和角度參數值不變)

也就是和上面03和04一樣的情況。

如果設置成Root Transform(即不勾選Bake into Pose),Root Transform將影響模型的實際位置和角度(前提是要設置“Apply Root Motion”,如果不設置Apply Root Motion的話,也就是說變換將不應用,場景中的模型位置或角度是不會有變化的(參數值自然也不變),就像一個行走動畫,可能一直在原地行走)。

也就是02的情況。

 

 

整個變化模型相當於這樣:

Mde

當你不勾選Bake烘焙的時候,你就進入了Root的選擇項。

 

開始→動畫1→動畫2,當動畫1和動畫2都Bake了的話,

①Apply Root Motion,父物體完全不影響,第二個動畫會返回從原點重新開始。

②No Apply Root Motion,父物體完全不影響,第二個動畫會返回從原點重新開始。

當動畫1Bake了,動畫2不Bake的時候,

③Apply Root Motion,出現了【Apply Root Motion的第二個作用】,待會兒再解釋,先給張圖體會體會:

GANGTI

Apply Root Motion的第二個作用是在動畫結束后,將Body Transform中的變化應用到模型(注意,這里是結束的時候才應用,也就是說動畫的時候,模型的position、rorate等參數是不變的,當動畫結束之后,開始新的動畫之前才會改變,注意這里跟前面提到的Root Transform的區別)

④No Apply Root Motion,父物體完全不影響,第二個動畫會返回從原點重新開始。

 

 

情況③把Bake的動畫2拿走,那么你將不會看到父級Transform發生變化 :

NOchange

【Apply Root Motion的第二個作用】發生的前提是,動畫1Bake了,動畫2不Bake,並且勾選Apply。

 

實際上,你要是動畫1不Bake就和表格01的情況一樣的(父級實時變化)。

 

 

典型應用:

不烘焙任何Pose,只使用Apply Root Motion。(這是用得最多的)

 

 

擴展閱讀:

[1] [Unity]從零開始認識C#腳本——以第三人稱控制器為例

 

參考文檔:

[1] Unity基礎(23)-動畫系統

[2] Root Motion深度解析[Unity]


免責聲明!

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



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