askvity

How to Calculate Velocity from Force in Unity

Published in Unity Physics 5 mins read

In Unity, you don't typically calculate the exact velocity resulting from a force application manually using a simple formula each frame. Instead, Unity's built-in physics engine handles the complex integration of forces over time for objects with a Rigidbody component. However, understanding the underlying physics principle is crucial, as it explains how the engine works.

Understanding the Physics Principle

The fundamental relationship between force, mass, and motion is described by Newton's laws. When a force acts on an object, it causes acceleration, which in turn changes the object's velocity over time.

Based on physics principles, specifically derived from Newton's Second Law (F = ma) and the definition of acceleration (a = Δv / Δt), the change in velocity (Δv) an object experiences when a constant force (F) is applied to it for a duration (Δt) is related to its mass (m). This relationship can be expressed as:

Velocity (v) equals Force (F) divided by mass (m) multiplied by time (t).

In formula form, this is often written as Δv = (F / m) * Δt. This means the velocity gained or changed (Δv) is directly proportional to the force applied (F) and the time it's applied (Δt), and inversely proportional to the object's mass (m). If you start from rest, this Δv represents the final velocity v after time t.

Velocity Calculation Handled by Unity

Unity's physics engine, specifically when working with the Rigidbody component, automatically calculates the effect of forces on an object's velocity over each fixed physics timestep (FixedUpdate). You apply forces to a Rigidbody, and the engine does the mathematical heavy lifting based on the principles mentioned above, along with other factors like gravity and drag.

You don't manually calculate v = (F/m) * t and set the velocity. Instead, you tell the Rigidbody what forces are acting on it, and Unity updates the Rigidbody.velocity property automatically over time.

Applying Force in Unity

The primary way to apply a force to a Rigidbody in Unity is using the Rigidbody.AddForce() method.

using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class ApplyForceExample : MonoBehaviour
{
    public float forceMagnitude = 10f;
    public Vector3 forceDirection = Vector3.forward;

    private Rigidbody rb;

    void Awake()
    {
        rb = GetComponent<Rigidbody>();
    }

    void FixedUpdate()
    {
        // Example: Apply a continuous force every physics step
        rb.AddForce(forceDirection.normalized * forceMagnitude, ForceMode.Force);
    }

    // Example: Apply an instantaneous impulse once
    public void ApplyImpulse()
    {
        rb.AddForce(forceDirection.normalized * forceMagnitude, ForceMode.Impulse);
    }
}

AddForce takes a force vector and a ForceMode. The ForceMode determines how the force is interpreted:

  • ForceMode.Force: Adds a continuous force to the rigidbody, causing acceleration. This is integrated over time by the physics engine, leading to a gradual change in velocity. This mode directly aligns with the F in the v = (F/m) * t formula, where t is the duration of the force application over subsequent FixedUpdate calls.
  • ForceMode.Impulse: Adds an instant velocity change to the rigidbody. While it feels "instant," it's treated as a very large force applied over a very short time. The magnitude of the force vector in this mode represents the desired change in momentum. Since momentum is mass * velocity, Impulse = Force * Time = Mass * Change in Velocity. So, applying a force F with ForceMode.Impulse causes a velocity change Δv = F / m. This mode essentially bypasses the time component in the v = (F/m) * t formula by incorporating the t into the effective force magnitude (Impulse = F*t).

Factors Influencing Velocity

When applying forces in Unity, the resulting velocity change is influenced by several factors managed by the Rigidbody:

  • Mass (Rigidbody.mass): A higher mass results in less acceleration for the same applied force (a = F/m).
  • Drag (Rigidbody.drag): A non-zero linear drag value will oppose the object's movement, effectively reducing its velocity over time, especially as it speeds up.
  • Other Forces: Gravity, collisions, friction, and other scripted forces also contribute to the net force acting on the object, affecting the final velocity.

In Summary

You calculate velocity from force in Unity by adding forces to an object's Rigidbody component using methods like AddForce(). Unity's physics engine then automatically integrates these forces over time, taking into account mass, drag, and other physical properties, to update the object's velocity according to the underlying physics principles like Δv = (F/m) * Δt. You observe the result via the Rigidbody.velocity property.

Concept Description Unity Component/Method
Force (F) A push or pull that can change motion Rigidbody.AddForce()
Mass (m) Resistance to acceleration Rigidbody.mass
Time (t) Duration over which force is applied Physics Engine (FixedUpdate timestep)
Velocity (v) Rate and direction of object's movement (result) Rigidbody.velocity

Related Articles