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實際上就是“烘焙成姿勢”,姿勢將是子物體的實時運動,不會影響父物體的位置和方向。
——這就意味着,在父物體上的碰撞體,會一直在原地不動。(靈魂出竅)
解決方案是不要勾選Bake into Pose,一個都不要勾選,
然后,碰撞體就能跟着走了。
由此可見這真的是一個Pose,它屬於Body Transform,身體產生的動作,
紅燈是提醒你不要勾選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的情況。
整個變化模型相當於這樣:
當你不勾選Bake烘焙的時候,你就進入了Root的選擇項。
開始→動畫1→動畫2,當動畫1和動畫2都Bake了的話,
①Apply Root Motion,父物體完全不影響,第二個動畫會返回從原點重新開始。
②No Apply Root Motion,父物體完全不影響,第二個動畫會返回從原點重新開始。
當動畫1Bake了,動畫2不Bake的時候,
③Apply Root Motion,出現了【Apply Root Motion的第二個作用】,待會兒再解釋,先給張圖體會體會:
Apply Root Motion的第二個作用是在動畫結束后,將Body Transform中的變化應用到模型(注意,這里是結束的時候才應用,也就是說動畫的時候,模型的position、rorate等參數是不變的,當動畫結束之后,開始新的動畫之前才會改變,注意這里跟前面提到的Root Transform的區別)
④No Apply Root Motion,父物體完全不影響,第二個動畫會返回從原點重新開始。
情況③把Bake的動畫2拿走,那么你將不會看到父級Transform發生變化 :
【Apply Root Motion的第二個作用】發生的前提是,動畫1Bake了,動畫2不Bake,並且勾選Apply。
實際上,你要是動畫1不Bake就和表格01的情況一樣的(父級實時變化)。
典型應用:
不烘焙任何Pose,只使用Apply Root Motion。(這是用得最多的)
擴展閱讀:
[1] [Unity]從零開始認識C#腳本——以第三人稱控制器為例
參考文檔: