UE4_动画基础_根运动Root Motion

文章讲述了在游戏开发中,根运动如何解决角色动画与碰撞体同步问题,确保角色在执行预设动画时保持与碰撞体的正确互动,以及在动画编辑和处理动画蓝图时的注意事项。

学习笔记,仅供参考!

在游戏动画中,角色的碰撞胶囊体(或其他形状)通常由控制器驱动通过场景。然后来自该胶囊体的数据用于驱动动画。例如,如果胶囊体在向前移动,系统就会知道在角色上播放一个跑步或行走的动画,让角色看起来是在靠自己的力量移动。但这种类型的运动并不始终适用于所有情况。在某些情况下,让复杂的动画实际驱动碰撞胶囊体(而非相反)是有道理的。这正是 根运动(Root Motion) 处理对游戏而言至关重要的原因之所在。

例如,假设玩家发起一次特殊攻击,在这种攻击中,模型已预先设定好向前冲的动作。如果所有的角色动作都是基于玩家胶囊体的,这样的动画会导致角色迈出胶囊体,从而在事实上失去碰撞。一旦动画播放结束,玩家就会滑回其碰撞位置(也就是胶囊体的位置)。这就会产生问题,因为胶囊体通常用作所有计算的中心。胶囊体外的角色将越过几何体,不会对其环境做出适当的反应。另外,在动画结束时滑回他们的胶囊体也并不现实。

对于那些刚刚接触这个概念的人来说,仅仅阅读说明未必能显然地明白合适根运动(Root Motion)的重要性。下面有一个角色正在执行一个预设定攻击动作,在这个攻击中,他们向前猛冲并砸下锤子。请注意,角色向前移动的动画不是在游戏中处理的 - 而是由动画艺术家以这种方式创建的。

其实通俗点讲就是动画驱动网格体向前运动,而胶囊体是游戏控制的,并没有向前运动,这样就导致网格体又回到了胶囊体的位置,动画并没有控制角色实例胶囊体的移动。

什么是根运动?

简单地说,根运动(Root Motion)是基于骨架根骨骼动画的角色运动。游戏中的大多数动画都是通过循环处理的,角色的根在循环中保持固定。然而,实际情况却并非始终如此,正如我们在上例

在 Unreal Engine 5 中处理带有高度变化的动画运动Root Motion)是一项关键任务,尤其是在实现角色在复杂地形上移动时的动画同步和物理交互。为了实现这一目标,通常需要调整动画蓝图(Animation Blueprint)、运动设置以及角色移动组件(Character Movement Component)的配置。 ### 运动Root Motion)的基本概念 运动是指角色的骨骼(通常是 Pelvis 或者 Root Bone)在动画中移动,从而驱动角色在世界空间中的移动。这种技术通常用于实现精确的动画驱动移动,例如角色在奔跑、跳跃或攀爬时的动作。 在带有高度变化的动画中(如跳跃、下蹲或在斜坡上行走),运动的处理需要特别注意,以确保角色能够正确地跟随地形的高度变化,并与动画同步。 ### 设置带有高度变化的运动 #### 1. 动画蓝图(Animation Blueprint)中的运动设置 在动画蓝图中,可以通过以下步骤启用和调整运动: - 在动画蓝图的 **Anim Graph** 中,使用 **Apply Root Motion** 节点来启用运动。 - 确保动画资产的 **Root Motion Extraction** 设置正确。可以在动画资产的导入设置中启用 **Extract Root Motion**,并选择适当的提取模式(如 **Root Motion from Everything** 或 **Root Motion from Montages Only**)[^1]。 #### 2. 处理高度变化 当动画包含高度变化(如跳跃或下蹲)时,需要确保角色在世界空间中的位置能够正确反映这些变化。可以通过以下方式实现: - **使用 Root Motion Override**:在动画蓝图中,可以使用 **Root Motion Override** 节点来手动控制运动的方向和幅度。这对于处理复杂的高度变化非常有用。 - **启用 Mesh Offset**:在角色蓝图中,可以使用 **Mesh Offset** 技术将角色的网格偏移一定的高度,以匹配地形的高度变化。这通常与 **Trace** 或 **Landscape Sampling** 结合使用,以确保角色始终贴合地形。 - **使用 Root Motion with Z Axis**:默认情况下,Unreal Engine 的运动可能仅影响 X 和 Y 轴。为了支持 Z 轴(高度)的变化,可以在动画蓝图中启用 **Apply Root Motion in Z Axis** 选项。这将允许动画中的骨骼在 Z 轴上移动,从而影响角色的位置[^1]。 #### 3. 角色移动组件(Character Movement Component) 为了确保运动与物理移动之间的协调,需要调整角色移动组件的设置: - 启用 **Use Controller Rotation** 和 **Orient Rotation to Movement**,以确保角色的旋转与移动方向一致。 - 设置 **Movement Mode** 为 **Walking** 或 **Falling**,具体取决于动画的类型。 - 调整 **Braking Deceleration Walking** 和 **Max Walk Speed** 等参数,以匹配动画的速度和节奏。 ### 示例代码:启用运动动画蓝图设置 以下是一个简单的示例,展示如何在动画蓝图中启用运动: ```cpp // 在动画蓝图的 Anim Graph 中 Apply Root Motion( Input Pose: In Pose, bAllowZ: true, // 启用 Z 轴的运动 Alpha: 1.0 // 完全应用运动 ) ``` ### 4. 调试和优化 在实际开发中,调试运动的行为是非常重要的。可以通过以下方式来调试和优化运动: - 使用 **Debug Root Motion** 选项来可视化运动的轨迹。 - 在角色蓝图中添加 **Debug Draw** 代码,绘制角色的当前位置和目标位置,以帮助分析运动的效果。 - 使用 **Anim Notify** 或 **Montage** 来触发特定的运动事件,例如跳跃或攀爬动作。 ### 总结 在 Unreal Engine 5 中处理带有高度变化的动画运动需要综合考虑动画蓝图的设置、角色移动组件的配置以及地形交互的处理。通过合理调整这些设置,可以实现更加自然和精确的角色移动效果。 ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Growthofnotes

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值