效果

步骤
新建一个"控制绑定"

这里命名为"CR_EchoFootIK"

找到角色的骨骼网格体并打开

可以看到这个角色包括IK骨骼(反向动力学骨骼)这些骨骼通常不直接绑定皮肤 (即不带有蒙皮权重,移动它们不会直接拉伸角色的肉体),而是作为目标点(Target)或参考点存在的。它们用于辅助程序化动画的计算。
-
没有ik_foot 的问题:脚部贴地。当游戏角色站在斜坡、楼梯或不平整的地面上时,如果只播放标准的站立动画,一只脚可能会悬空,另一只脚可能会陷入地下。
-
没有ik_hand 的问题:武器握持与手部锁定。在使用长枪(步枪)等双手武器时,不同的呼吸动画或移动动画可能会导致左手(托举手)滑离枪管,或者导致枪穿模。

如果角色没有IK骨骼,我们可以通过创建虚拟骨骼来代替IK骨骼。首先点击"添加虚拟骨骼-》root"

添加后会出现一个名为"VB root_root"的虚拟骨骼

选中"VB root_root",添加虚拟骨骼foot_l和foot_r

添加后会在"VB root_root"层级下添加"VB VB root_root_foot_r"和"VB VB root_root_foot_l"

打开"CR_EchoFootIK"点击"Import Hierarchy"

选择网格体然后点击确定

添加一个函数,这里命名为"FootTrace"

函数"FootTrace"添加输入输出

函数逻辑如下,在指定的骨骼的前方5cm上方50cm处发出球体追踪,在正下方150cm处结束追踪,检测到碰撞后返回碰撞点坐标。

创建如下变量,注意ShouldDoTrace设置为公有

图表中添加如下节点。主要实现的是 Foot IK(足部反向动力学) 功能,具体来说是**"地形贴合"**。它的作用是让角色的脚能够根据地面的高低起伏自动调整位置,并带动盆骨(Pelvis)上下移动,从而避免"脚悬空"或者"脚陷地"的现象

从脚部前上方的位置向下发射球体追踪,检测左脚下的地面高度,计算出当前脚的位置和实际地面的距离差,存入 ZOffset_LTarget。同理,计算右脚的偏移量,存入 ZOffset_RTarget

直接使用第1步检测到的数值可能会导致脚瞬间跳变,这里使用了 Alpha Interpolate 节点。它会将当前的偏移量 ZOffset_L 平滑地过渡到目标偏移量 ZOffset_LTarget,参数 Interp Speed(图中是15.0)决定了脚适应地形的速度。数值越大,脚贴地越快;数值越小,动作越柔和

比较左脚偏移量 ZOffset_L 和右脚偏移量 ZOffset_R,取两者的最小值。如果是负值(脚踩坑里了),盆骨需要跟着降低,否则腿会不够长,导致脚悬空

这里并没有直接移动真的脚骨骼,而是移动了虚拟骨骼。使用 Modify Transform(修改变换)节点,将计算好的 Z轴偏移量加到虚拟骨骼和盆骨上。这一步做完后,虚拟骨骼已经处于"贴合地面"的完美位置了,但角色原本的脚还在半空中或者地底下

让真骨骼去追逐虚拟骨骼,并自动调整全身姿态。输入是刚才移动到位的左/右虚拟骨骼的 Transform。FBIK 求解器会强制把真脚拉到虚拟骨骼的位置。在这个过程中,FBIK 会自动计算膝盖的弯曲、髋关节的旋转、甚至脊柱的微调,让角色的姿势看起来自然

打开动画蓝图"ABP_SlashCharacter",在动画图表中添加如下节点。这样就实现了只在角色站立不动时启用 Foot IK,而在跑动时关闭它,可以节省性能,也能防止跑动时的脚步滑动。

选中"Control Rig"节点,在细节面板中色织控制绑定类为"CR_EchoFootIK"

此时运行可以看到角色双脚可以完美贴合地形了。
