Add Force 节点是虚幻引擎中实现物理驱动物体运动的核心方法之一。它通过在每一帧持续施加力,来模拟“推力”或“爆发”等效果。
下面通过几个完整的案例,一步步讲解它的具体用法。
核心概念:Add Force vs Add Impulse
在开始前,需要明确两个核心节点的区别:
-
Add Impulse(添加冲量):瞬间施加一个力,物体速度会立刻改变,适合“爆炸”、“撞击”等效果。 -
Add Force(添加力):持续施加力,需要在每一帧(Tick)调用才能生效。力会累积,并考虑物体的质量,适合“火箭推进”、“持续风场”等效果。
案例一:基础用法 – 持续推力 (火箭/推进器)
这是最常用的案例,实现一个按下按键就持续推动物体的效果。
操作步骤:
-
准备场景:
-
在关卡中放置一个
Cube(立方体) 或任何静态网格体 (Static Mesh)。 -
选中它,在细节面板 (Details) 中,找到
Simulate Physics(模拟物理) 并勾选。确保它启用了物理模拟。 -
(可选)为了看得更清楚,可以将其
Mass(质量) 设为1.0。
-
-
创建蓝图:
-
为这个立方体创建一个新的蓝图类(或直接在关卡蓝图中操作,但建议使用Actor蓝图)。
-
打开蓝图,在事件图表中工作。
-
-
添加输入事件:
-
在事件图表中右键,搜索
Space Bar或W等按键事件,添加InputAction或InputKey事件。
-
-
核心逻辑:持续施加力:
-
为了实现持续推力,需要将“施加力”的逻辑放在
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连接到该组件。
-
-
参数说明:
-
Force(力):决定方向和大小。(X, Y, Z),Z轴向上。 -
Bone Name(骨骼名称):用于骨骼网格体,默认None表示根骨骼。 -
Accel Change(加速度改变):-
False(默认):力的大小会受物体质量影响,质量越大,加速度越小。 -
True:力被视为“加速度变化”,忽略质量影响,所有物体获得相同的加速度。
-
-
案例二:基础用法 – 一次性爆发冲击力
如果想实现一个瞬间的推力(比如被爆炸冲击波推开),虽然 Add Impulse 更合适,但用 Add Force 配合计时器也能实现类似“短时爆发”的效果。
操作步骤:
-
沿用案例一准备好的物理物体。
-
添加一个按键事件(如按
F键)。 -
在按键事件后面,创建一个
Sequence节点或直接连线。 -
调用
Add Force节点,施加一个较大的力,例如(0, 0, 5000)。 -
关键:为了让力持续一小段时间(比如0.2秒)而不是瞬间,可以使用
Delay节点配合循环,或更专业的Timeline节点来控制力的持续时间。-
简单方法:在按键事件后,开启一个
Set Timer by Event,在定时器回调中每帧调用Add Force,并在0.2秒后清除定时器。
-
-
运行游戏,按下按键,物体会获得一个持续的爆发力。
案例三:进阶案例 – 实现“吸引”或“龙卷风”效果
此案例展示如何让一个物体被另一个物体吸引,模拟磁力或引力。
操作步骤:
-
设置场景:放置两个启用了物理模拟的球体(Sphere),一个作为“吸引者”,一个作为“被吸引者”。
-
创建“吸引者”蓝图:
-
在“吸引者”蓝图的
Event Tick中,使用Get All Actors of Class获取场景中所有“被吸引者”类的实例。 -
使用
For Each Loop遍历每一个“被吸引者”。 -
在循环体内:
-
计算方向:使用
Get Actor Location获取“吸引者”和“被吸引者”的位置。 -
计算从“被吸引者”指向“吸引者”的方向向量:
吸引者位置 - 被吸引者位置。 -
归一化:使用
Normalize节点将方向向量单位化。 -
施加力:调用
Add Force节点,Target连接到“被吸引者”的物理组件,Force连接归一化后的方向向量乘以一个强度值(如500.0)。
-
-
-
效果:运行游戏,“被吸引者”会持续受到指向“吸引者”的力,产生吸引效果。
案例四:进阶案例 – 在局部空间施加力
Add Force 默认在世界空间 (World Space) 中施加力。如果想实现“向前喷气”这种局部效果,需要将物体的局部方向转换为世界方向。
操作步骤:
-
在物体的
Event Tick中。 -
获取物体的局部方向向量:使用
Get Forward Vector(向前)、Get Right Vector(向右)或Get Up Vector(向上)节点。 -
将这些向量乘以你想要的力的大小。
-
将结果作为
Force输入给Add Force节点。
这样,无论物体如何旋转,施加的力始终是相对于其自身方向的。
常见问题与注意事项
-
物理模拟未开启:
Add Force只对启用了Simulate Physics的物体生效。检查目标组件的细节面板。 -
在 Tick 中调用:持续力必须在
Event Tick中每帧调用才会有效果。力的效果会随帧率变化,但引擎会自动处理时间步长缩放。 -
力的累积:在同一帧内多次调用
Add Force,力会累积并一起应用。 -
角色移动:对于使用
CharacterMovementComponent的角色,可以直接在角色蓝图中调用Add Force节点(Target为Character Movement)来施加力。 -
性能:对大量物体每帧施加力可能会影响性能,请合理使用。
总结
Add Force 的核心在于 “持续” 和 “累积” 。掌握好它在 Event Tick 中的使用,并结合 Accel Change 参数理解质量的影响,就能实现从简单的推进器到复杂的引力场等各种物理效果。
感谢您的来访,获取更多精彩文章请收藏本站。







暂无评论内容