【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"

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

相关推荐
九影网络14 小时前
选九影网络做游戏定制开发,硬核技术壁垒,全流程技术护航
游戏
AI视觉网奇15 小时前
metahuman 购买安装记录
笔记·学习·ue5
Howrun77715 小时前
虚幻引擎_C++_游戏开始菜单
游戏·游戏引擎·虚幻
速冻鱼Kiel16 小时前
虚幻状态树解析
ue5·游戏引擎·虚幻
早日退休!!!16 小时前
语言图式论与语言游戏说
游戏
子春一16 小时前
Flutter for OpenHarmony:构建一个 Flutter 井字棋游戏,深入解析状态驱动逻辑、胜利判定与极简交互设计
flutter·游戏·交互
ujainu17 小时前
Flutter + OpenHarmony 游戏开发进阶:CustomPainter 手绘游戏世界——从球体到轨道
flutter·游戏·信息可视化·openharmony
子春一18 小时前
Flutter for OpenHarmony:构建一个 Flutter 贪吃蛇游戏,深入解析状态机、碰撞检测与响应式游戏循环
flutter·游戏
ujainu19 小时前
无物理引擎实现吸附轨道逻辑 —— Flutter + OpenHarmony 实战指南
flutter·游戏·openharmony
ujainu19 小时前
Flutter + OpenHarmony 游戏开发进阶:动态关卡生成——随机圆环布局算法
算法·flutter·游戏·openharmony