【UE5.3 C++】ARPG游戏 04-角色脚部贴合地形

效果

步骤

新建一个"控制绑定"

这里命名为"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"

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

相关推荐
晴夏。4 小时前
UE Spawn出来的Actor的生命周期和管理方法
游戏·ue5·ue4·ue
RPGMZ7 小时前
RPGMakerMZ 地图存档点制作 标题继续游戏直接读取存档
开发语言·javascript·游戏·游戏引擎·rpgmz·rpgmakermz
柚要做甚码9 小时前
godot-rust(gdext)2D游戏之旅【pong】 - 2
游戏·游戏开发
柚要做甚码9 小时前
godot-rust(gdext)2D游戏之旅【pong】 - 3
游戏·游戏开发
盼小辉丶11 小时前
PyTorch强化学习实战——构建生成对抗网络生成Atari游戏画面
pytorch·游戏·生成对抗网络
晴夏。12 小时前
UE垃圾回收的全方面讲解(通俗易懂)【底层实现、触发方式、引用保持、优化、工具】
ue5·游戏引擎·ue·垃圾回收
邪修king13 小时前
UE5:C++ 实现 游戏逻辑 ↔ UI 双向联动
c++·游戏·ue5
Avalon7121 天前
Unity3D响应式渲染UI框架UniVue
游戏·ui·unity·c#·游戏引擎
念威1 天前
弹幕互动游戏AI无人直播方案 - 可遇AI无人直播助手
人工智能·游戏
风酥糖1 天前
Godot游戏练习01-第33节-新增会爆炸的敌人
游戏·游戏引擎·godot