学习UE4动画蓝图:实现双脚贴地

时间:2024-04-04 10:22:56

目标

在上一篇博客《学习UE4动画蓝图:配置脚部IK》中,IK功能解决了“脚部陷入地下”的问题,但是还是有“脚部悬空”的问题。《[UE4蓝图]虚幻4中完整实现脚部IK(二)(完结) - 知乎》这篇文章提出可以将根骨骼向下偏移来解决这个问题,我决定使用这个思路,下面是我的实践。

1.偏移根骨骼

1.1 动画蓝图的 AnimGraph 中添加对根骨骼的偏移

添加一个变换(修改)骨骼节点:
学习UE4动画蓝图:实现双脚贴地

  • Bone to Modify 选择根骨骼root
  • Translation Mode 选择Add to Existing,这表示将对现有的transform做一个偏移。
  • Translation Space 选择World Space,这表示偏移的变量将采用世界空间。

偏移的变量为Root Offset,将在事件图表中设置

1.2 角色蓝图中添加脚部悬空偏移变量

增加一个变量FootOffset表示脚部的偏移(后续会添加对其计算的逻辑):
学习UE4动画蓝图:实现双脚贴地
另外,由于模型的根骨骼会发生偏移,那么之前射线的操作会有错误,需要对IK Foot Trace函数做修正:增加一个Height Offset的输入表示高度的偏移,然后在GetActorLocation之后应用上在Z轴上,这才是真正的人物中心点。(图中注释框的标题描述不准确)
学习UE4动画蓝图:实现双脚贴地
随后在调用这个函数时,记得将FootOffset输入给它。
学习UE4动画蓝图:实现双脚贴地

1.3 动画蓝图的 事件图表 中获取根骨骼的偏移

学习UE4动画蓝图:实现双脚贴地

1.4测试根骨骼偏移的效果

为了测试,在角色蓝图中连入一个临时的逻辑:按下Q/E键会升高/降低FootOffset
学习UE4动画蓝图:实现双脚贴地
效果:
学习UE4动画蓝图:实现双脚贴地

2. 在角色蓝图中计算根骨骼偏移量

根骨骼的偏移,也是需要对脚部做射线操作。
首先在角色蓝图中添加一个函数FootAirTrace用来获取脚部悬空的高度:
学习UE4动画蓝图:实现双脚贴地
它的结构和之前的IK Foot Trace很像,但是在射线的起止点以及最后偏移的计算上有很大差别。这次的射线逻辑如图:
学习UE4动画蓝图:实现双脚贴地
然后,在Tick中随时做双脚的射线计算悬空的偏移,这个值是一个负值,二者更小的值是FootOffset
学习UE4动画蓝图:实现双脚贴地

3. 平滑由于射线操作导致的动作突变

由于使用了射线的结果来决定骨骼的状态,当射线的表面有突变时(比如台阶),得到的结果也会有突变。为了减少此突变,可以使用FInterp To节点来平滑
学习UE4动画蓝图:实现双脚贴地
随后在射线操作导致的会突变的变量中都加入FInterp To节点来平滑过渡:
学习UE4动画蓝图:实现双脚贴地

效果

学习UE4动画蓝图:实现双脚贴地
学习UE4动画蓝图:实现双脚贴地