目标
在上一篇博客《学习UE4动画蓝图:配置脚部IK》中,IK功能解决了“脚部陷入地下”的问题,但是还是有“脚部悬空”的问题。《[UE4蓝图]虚幻4中完整实现脚部IK(二)(完结) - 知乎》这篇文章提出可以将根骨骼向下偏移来解决这个问题,我决定使用这个思路,下面是我的实践。
1.偏移根骨骼
1.1 动画蓝图的 AnimGraph 中添加对根骨骼的偏移
添加一个变换(修改)骨骼节点:
-
Bone to Modify 选择根骨骼
root
-
Translation Mode 选择
Add to Existing
,这表示将对现有的transform做一个偏移。 -
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
节点来平滑过渡: