虚幻引擎 Add Force 节点

Add Force 节点是虚幻引擎中实现物理驱动物体运动的核心方法之一。它通过在每一帧持续施加力,来模拟“推力”或“爆发”等效果

下面通过几个完整的案例,一步步讲解它的具体用法。

核心概念:Add Force vs Add Impulse

在开始前,需要明确两个核心节点的区别:

  • Add Impulse (添加冲量):瞬间施加一个力,物体速度会立刻改变,适合“爆炸”、“撞击”等效果

  • Add Force (添加力):持续施加力,需要在每一帧(Tick)调用才能生效。力会累积,并考虑物体的质量,适合“火箭推进”、“持续风场”等效果


案例一:基础用法 – 持续推力 (火箭/推进器)

这是最常用的案例,实现一个按下按键就持续推动物体的效果。

操作步骤:

  1. 准备场景

    • 在关卡中放置一个 Cube (立方体) 或任何静态网格体 (Static Mesh)

    • 选中它,在细节面板 (Details) 中,找到 Simulate Physics (模拟物理) 并勾选。确保它启用了物理模拟。

    • (可选)为了看得更清楚,可以将其 Mass (质量) 设为 1.0

  2. 创建蓝图

    • 为这个立方体创建一个新的蓝图类(或直接在关卡蓝图中操作,但建议使用Actor蓝图)。

    • 打开蓝图,在事件图表中工作。

  3. 添加输入事件

    • 在事件图表中右键,搜索 Space Bar 或 W 等按键事件,添加 InputAction 或 InputKey 事件。

  4. 核心逻辑:持续施加力

    • 为了实现持续推力,需要将“施加力”的逻辑放在 Event Tick 节点上。

    • 但是,我们只希望在按住按键时施加力,因此需要结合 Branch (分支) 节点来控制。

    • 具体蓝图连线如下

      • Event Tick -> Branch (条件判断)。

      • 创建一个 Is Input Key Down 节点,将 Key 设置为 Space Bar。将其输出连接到 Branch 的条件输入。

      • 如果 Branch 为 True,则调用 Add Force 节点

      • Add Force 节点的 Target 连接到 Self(如果是Actor蓝图)或通过 Get Player Pawn 等获取。

      • Force 参数输入一个向量,例如 (0, 0, 1000),这表示在世界坐标系中向上施加1000单位的力

    • 注意:如果 Add Force 节点是作用于 Primitive Component (如立方体的静态网格体),则 Target 应连接到该组件。如果作用于 Character Movement Component,则 Target 连接到该组件

  5. 参数说明

    • Force (力):决定方向和大小。(X, Y, Z),Z轴向上

    • Bone Name (骨骼名称):用于骨骼网格体,默认 None 表示根骨骼

    • Accel Change (加速度改变)

      • False (默认):力的大小会受物体质量影响,质量越大,加速度越小

      • True:力被视为“加速度变化”,忽略质量影响,所有物体获得相同的加速度


案例二:基础用法 – 一次性爆发冲击力

如果想实现一个瞬间的推力(比如被爆炸冲击波推开),虽然 Add Impulse 更合适,但用 Add Force 配合计时器也能实现类似“短时爆发”的效果。

操作步骤:

  1. 沿用案例一准备好的物理物体。

  2. 添加一个按键事件(如按 F 键)。

  3. 在按键事件后面,创建一个 Sequence 节点或直接连线。

  4. 调用 Add Force 节点,施加一个较大的力,例如 (0, 0, 5000)

  5. 关键:为了让力持续一小段时间(比如0.2秒)而不是瞬间,可以使用 Delay 节点配合循环,或更专业的 Timeline 节点来控制力的持续时间。

    • 简单方法:在按键事件后,开启一个 Set Timer by Event,在定时器回调中每帧调用 Add Force,并在0.2秒后清除定时器。

  6. 运行游戏,按下按键,物体会获得一个持续的爆发力。


案例三:进阶案例 – 实现“吸引”或“龙卷风”效果

此案例展示如何让一个物体被另一个物体吸引,模拟磁力或引力

操作步骤:

  1. 设置场景:放置两个启用了物理模拟的球体(Sphere),一个作为“吸引者”,一个作为“被吸引者”。

  2. 创建“吸引者”蓝图

    • 在“吸引者”蓝图的 Event Tick 中,使用 Get All Actors of Class 获取场景中所有“被吸引者”类的实例。

    • 使用 For Each Loop 遍历每一个“被吸引者”。

    • 在循环体内:

      • 计算方向:使用 Get Actor Location 获取“吸引者”和“被吸引者”的位置。

      • 计算从“被吸引者”指向“吸引者”的方向向量:吸引者位置 - 被吸引者位置

      • 归一化:使用 Normalize 节点将方向向量单位化

      • 施加力:调用 Add Force 节点,Target 连接到“被吸引者”的物理组件,Force 连接归一化后的方向向量乘以一个强度值(如 500.0)。

  3. 效果:运行游戏,“被吸引者”会持续受到指向“吸引者”的力,产生吸引效果。


案例四:进阶案例 – 在局部空间施加力

Add Force 默认在世界空间 (World Space) 中施加力。如果想实现“向前喷气”这种局部效果,需要将物体的局部方向转换为世界方向

操作步骤:

  1. 在物体的 Event Tick 中。

  2. 获取物体的局部方向向量:使用 Get Forward Vector(向前)、Get Right Vector(向右)或 Get Up Vector(向上)节点。

  3. 将这些向量乘以你想要的力的大小。

  4. 将结果作为 Force 输入给 Add Force 节点。
    这样,无论物体如何旋转,施加的力始终是相对于其自身方向的。


常见问题与注意事项

  • 物理模拟未开启Add Force 只对启用了 Simulate Physics 的物体生效。检查目标组件的细节面板。

  • 在 Tick 中调用:持续力必须在 Event Tick 中每帧调用才会有效果。力的效果会随帧率变化,但引擎会自动处理时间步长缩放

  • 力的累积:在同一帧内多次调用 Add Force,力会累积并一起应用

  • 角色移动:对于使用 CharacterMovementComponent 的角色,可以直接在角色蓝图中调用 Add Force 节点(Target 为 Character Movement)来施加力

  • 性能:对大量物体每帧施加力可能会影响性能,请合理使用。

总结

Add Force 的核心在于 “持续” 和 “累积” 。掌握好它在 Event Tick 中的使用,并结合 Accel Change 参数理解质量的影响,就能实现从简单的推进器到复杂的引力场等各种物理效果。

感谢您的来访,获取更多精彩文章请收藏本站。

THE END
喜欢就支持一下吧
点赞7 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容