目标
在上一篇部落格《學習UE4動畫藍圖:配置腳部IK》中,IK功能解決了“腳部陷入地下”的問題,但是還是有“腳部懸空”的問題。《[UE4藍圖]虛幻4中完整實作腳部IK(二)(完結) - 知乎》這篇文章提出可以将根骨骼向下偏移來解決這個問題,我決定使用這個思路,下面是我的實踐。
1.偏移根骨骼
1.1 動畫藍圖的 AnimGraph 中添加對根骨骼的偏移
添加一個變換(修改)骨骼節點:
- Bone to Modify 選擇根骨骼
root
- Translation Mode 選擇
,這表示将對現有的transform做一個偏移。Add to Existing
- Translation Space 選擇
,這表示偏移的變量将采用世界空間。World Space
偏移的變量為
Root Offset
,将在事件圖表中設定
1.2 角色藍圖中添加腳部懸空偏移變量
增加一個變量
FootOffset
表示腳部的偏移(後續會添加對其計算的邏輯):
另外,由于模型的根骨骼會發生偏移,那麼之前射線的操作會有錯誤,需要對
IK Foot Trace
函數做修正:增加一個
Height Offset
的輸入表示高度的偏移,然後在
GetActorLocation
之後應用上在Z軸上,這才是真正的人物中心點。(圖中注釋框的标題描述不準确)
随後在調用這個函數時,記得将
FootOffset
輸入給它。
1.3 動畫藍圖的 事件圖表 中擷取根骨骼的偏移
1.4測試根骨骼偏移的效果
為了測試,在角色藍圖中連入一個臨時的邏輯:按下Q/E鍵會升高/降低
FootOffset
。
效果:
2. 在角色藍圖中計算根骨骼偏移量
根骨骼的偏移,也是需要對腳部做射線操作。
首先在角色藍圖中添加一個函數
FootAirTrace
用來擷取腳部懸空的高度:
它的結構和之前的
IK Foot Trace
很像,但是在射線的起止點以及最後偏移的計算上有很大差别。這次的射線邏輯如圖:
然後,在Tick中随時做雙腳的射線計算懸空的偏移,這個值是一個負值,二者更小的值是
FootOffset
。
3. 平滑由于射線操作導緻的動作突變
由于使用了射線的結果來決定骨骼的狀态,當射線的表面有突變時(比如台階),得到的結果也會有突變。為了減少此突變,可以使用
FInterp To
節點來平滑
随後在射線操作導緻的會突變的變量中都加入
FInterp To
節點來平滑過渡: