足部放置节点(Foot Placement Node) 的核心作用是为足部 IK(Foot IK)计算并输出精准的目标位置与旋转,是实现角色在不规则地面行走、奔跑时足部自然贴合地面的关键节点。该节点需与 IK 节点配合使用以完成最终的骨骼驱动,推荐与 CharacterController 组件搭配 —— CharacterController 的移动逻辑可与足部放置的地面检测形成联动,确保角色移动与足部姿态的一致性。
足部放置节点计算出的目标位置 / 旋转,需通过专门的 IK 目标骨骼传递给 IK 节点,因此需手动创建该层级(若模型已包含类似 IK 目标骨骼,可直接复用),层级结构参考如下:
CharacterRoot
Hips
...
+ Rig (新建 IK 目标根对象)
+ LeftFootGoal (新建左脚 IK 目标)
+ RightFootGoal (新建右脚 IK 目标)
确保目标骨骼名称唯一,当前实现暂时通过名称索引骨骼,同名会导致识别失败。
IK 节点的配置参考文档,需要在 AnimGraph Inspector 中将对应的足部目标开放为 Driven By Bone,并设置 Driver Bone Name,即上述的目标 IK 骨骼。如果想忽略旋转可以将 Rotation 设置为 Ignore。
在 AnimGraph 中添加 Foot Placement 节点后,按以下步骤完成参数配置。
Hip Bone Name 为必填项,填入角色盆骨骨骼的名称(如 “Hips” 或 “Pelvis”),作为腿部骨骼的共同父节点。
Smoothing 参数用来调整线性插值的平滑过渡效果,数值越大平滑越慢。
接着我们需要添加腿部数据,点击 + 号进行添加,该部分设置皆为必填项:
| 参数名 | 描述 |
|---|---|
| Foot Bone Name | 角色足部骨骼的名称(如 “LeftFoot” 或 “RightFoot”),用于定位实际驱动的足部骨骼。 |
| Driver Bone Name | 填入 IK 目标骨骼名称(如 “LeftFootGoal”),用于接收节点输出的目标位置 / 旋转。 |
| Upper Leg Bone Name | 大腿骨骼的名称(如 “LeftThigh” 或 “LeftUpperLeg”)。 |
在计算过程中,目前使用了 SmoothDamp 来平滑过渡,因此对于需要过渡的地方(包括设置中的 Leg Offset Smooth 和 Relock Smooth)都提供了 SmoothDamp 参数用于修改。
| 参数名 | 描述 |
|---|---|
| Smooth Time | 平滑过渡的时间,值越小过渡越迅速,值越大越平缓。 |
| Max Speed | 平滑过渡的最大速度限制,防止过渡过程中目标位置突变。 |
用于控制角色在移动时足部是否锁定地面(防止滑动),参数说明如下:
| 参数名 | 描述 |
|---|---|
| Auto-Correction Internal | 自动校正间隔时间,例如静止状态下会回正足部位置。 |
| Lock Foot Enabeld | 是否开启锁步功能。 |
| Lock Ground Distance | 足部锁定地面的距离阈值,当足部与地面距离小于该值时,触发锁步逻辑。 |
| Unlock Radius | 当角色移动距离超过该半径时,解锁当前锁定的足部,允许重新调整位置。 |
| Relock Raidus Ratio | 重锁半径比例(范围 0.0~1.0),相对于 Unlock Radius 的比例值,用于控制足部重新锁定的触发范围(如设置为 0.2,则当角色移动回解锁半径的 20% 范围内时,重新锁定足部)。 |
节点通过射线检测(Raycast)获取地面信息,以下参数控制射线检测的行为:
| 参数名 | 描述 |
|---|---|
| Ground Layer Mask | 地面层掩码,指定哪些 Layer 的对象被视为 “地面”。 |
| Origin Offset Up | 射线起点向上偏移量,用于调整射线发射的初始位置。 |
| Max Trace Distance | 最大射线检测距离。 |
为方便调试节点配置与运行效果,提供了 FootPlacement Debugger 组件,支持编辑器下的可视化监控与数据打印,使用方式如下:
选中角色根对象,在 Inspector 面板中点击 Add Component,搜索并添加 FootPlacement Debugger 组件;
进入 PlayMode 后,组件会自动关联角色的 Foot Placement 节点(仅支持一个),提供以下 Debug 功能:
可视化显示:场景视图中会绘制关键调试元素
实时数据打印:在 FootPlacement Debugger 组件的 Inspector 面板下方,实时打印每帧关键数据