UPrimitiveComponent::AddForce
#include "Components/PrimitiveComponent.h"
Access: public
Specifiers: virtual
Description
Applies a continuous force to the physics body each frame it is called. Unlike AddImpulse (instantaneous), AddForce must be called every frame to maintain its effect.
Signature
virtual void AddForce(FVector Force, FName BoneName = NAME_None, bool bAccelChange = false) Parameters
| Name | Type | Description | Default |
|---|---|---|---|
| Force | FVector | Force vector in world space (kg*cm/s²), applied continuously while called. | — |
| BoneName | FName | Target bone for skeletal meshes. NAME_None targets the root body. | NAME_None |
| bAccelChange | bool | If true, treats Force as acceleration (mass-independent). If false, applies as a true force (F=ma). | false |
Return Type
void Caveats & Gotchas
- • Must be called every frame (e.g. in Tick) to sustain the force. It does not persist between frames.
- • Has no effect unless physics simulation is enabled.
- • For constant environmental forces (gravity wells, wind), consider using PhysicsConstraintComponents or physics volumes instead of per-frame AddForce calls.
Example
Hover thruster applying continuous upward force C++
void AHoverCraft::Tick(float DeltaTime)
{
Super::Tick(DeltaTime);
// Apply lift force proportional to how far below target height we are
float HeightDelta = TargetHoverHeight - GetActorLocation().Z;
FVector LiftForce = FVector(0.f, 0.f, HeightDelta * LiftStrength);
MeshComponent->AddForce(LiftForce, NAME_None, true); // bAccelChange=true
} Tags
Version History
Introduced in: unknown
| Version | Status | Notes |
|---|---|---|
| 5.6 | stable | — |
Feedback
Was this helpful?