Bird
Raised Fist0
Unityframework~10 mins

Rigidbody forces and velocity in Unity - Step-by-Step Execution

Choose your learning style10 modes available

Start learning this pattern below

Jump into concepts and practice - no test required

or
Recommended
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Concept Flow - Rigidbody forces and velocity
Start
Apply Force
Physics Engine Updates Velocity
Velocity Changes Rigidbody Position
Next Frame or Input
Apply Force
This flow shows how applying a force changes velocity, which then moves the Rigidbody each frame.
Execution Sample
Unity
void FixedUpdate() {
  rb.AddForce(new Vector3(0, 10, 0));
  Debug.Log(rb.velocity);
}
Each physics frame, a force pushes the Rigidbody up, changing its velocity which is printed.
Execution Table
StepForce AppliedVelocity BeforeVelocity AfterPosition ChangeOutput
1(0, 10, 0)(0, 0, 0)(0, 0.1, 0)Position moves slightly up(0, 0.1, 0)
2(0, 10, 0)(0, 0.1, 0)(0, 0.2, 0)Position moves more up(0, 0.2, 0)
3(0, 10, 0)(0, 0.2, 0)(0, 0.3, 0)Position moves further up(0, 0.3, 0)
4(0, 10, 0)(0, 0.3, 0)(0, 0.4, 0)Position moves further up(0, 0.4, 0)
5(0, 10, 0)(0, 0.4, 0)(0, 0.5, 0)Position moves further up(0, 0.5, 0)
6No force applied(0, 0.5, 0)(0, 0.5, 0)Position moves by velocity(0, 0.5, 0)
7No force applied(0, 0.5, 0)(0, 0.5, 0)Position moves by velocity(0, 0.5, 0)
ExitN/AN/AN/AN/AForce stops or simulation ends
💡 Force stops or simulation ends, velocity remains constant without new forces.
Variable Tracker
VariableStartAfter 1After 2After 3After 4After 5After 6Final
velocity(0,0,0)(0,0.1,0)(0,0.2,0)(0,0.3,0)(0,0.4,0)(0,0.5,0)(0,0.5,0)(0,0.5,0)
position(0,0,0)slightly upmore upfurther upfurther upfurther upmoves by velocitymoves by velocity
Key Moments - 3 Insights
Why does velocity keep increasing when force is applied every frame?
Because each frame adds force, velocity changes accumulate as shown in rows 1-5 of the execution_table.
What happens to velocity if no force is applied?
Velocity stays the same (rows 6-7), so Rigidbody keeps moving at constant speed without acceleration.
Does applying force instantly change position?
No, force changes velocity first, then velocity moves the Rigidbody position each frame (see flow and position changes).
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at step 3, what is the velocity after applying force?
A(0, 0.2, 0)
B(0, 0.3, 0)
C(0, 0.1, 0)
D(0, 0, 0)
💡 Hint
Check the 'Velocity After' column at step 3 in the execution_table.
At which step does velocity stop increasing?
AStep 3
BStep 5
CStep 6
DStep 1
💡 Hint
Look for when 'Force Applied' is 'No force applied' and velocity stays the same.
If force applied each frame was doubled, how would velocity change at step 2?
AVelocity would be (0, 0.4, 0)
BVelocity would be (0, 0.2, 0)
CVelocity would be (0, 0.1, 0)
DVelocity would be (0, 0, 0)
💡 Hint
Doubling force doubles velocity increase per step, check velocity increments in variable_tracker.
Concept Snapshot
Rigidbody forces add acceleration each physics frame.
Velocity changes based on force and mass.
Velocity moves Rigidbody position each frame.
No force means constant velocity (no acceleration).
Use AddForce() in FixedUpdate() for smooth physics.
Full Transcript
This visual trace shows how applying a force to a Rigidbody in Unity changes its velocity step by step. Each physics frame, the force adds to velocity, which then moves the Rigidbody's position. When force stops, velocity stays constant, so the Rigidbody keeps moving at the same speed. The execution table tracks force applied, velocity before and after, position changes, and output velocity logged. The variable tracker shows velocity and position changes over time. Key moments clarify why velocity accumulates with force, what happens when force stops, and that force affects velocity first, not position instantly. The quiz tests understanding of velocity values at steps, when velocity stops increasing, and effects of changing force magnitude. The snapshot summarizes the core rules for Rigidbody forces and velocity in Unity physics.

Practice

(1/5)
1. In Unity, what is the main difference between applying a force to a Rigidbody and setting its velocity directly?
easy
A. Applying a force stops the Rigidbody immediately, setting velocity makes it float.
B. Applying a force changes the Rigidbody's color, setting velocity changes its size.
C. Applying a force disables gravity, setting velocity enables gravity.
D. Applying a force changes velocity gradually, setting velocity changes it instantly.

Solution

  1. Step 1: Understand force effect on Rigidbody

    Applying a force adds acceleration, so velocity changes smoothly over time.
  2. Step 2: Understand velocity setting

    Setting velocity directly changes speed and direction immediately without gradual acceleration.
  3. Final Answer:

    Applying a force changes velocity gradually, setting velocity changes it instantly. -> Option D
  4. Quick Check:

    Force = gradual change, velocity = instant change [OK]
Hint: Force pushes smoothly; velocity sets speed instantly [OK]
Common Mistakes:
  • Thinking force stops the object immediately
  • Confusing force with color or size changes
  • Believing velocity affects gravity
2. Which of the following is the correct way to add an upward force to a Rigidbody named rb in Unity?
easy
A. rb.AddForce(Vector3.up * 10);
B. rb.AddForce(10, Vector3.up);
C. rb.AddForce(10);
D. rb.AddForceUp(10);

Solution

  1. Step 1: Check AddForce method signature

    Unity's Rigidbody.AddForce expects a Vector3 representing force direction and magnitude.
  2. Step 2: Verify correct usage

    Using Vector3.up * 10 applies force upwards with magnitude 10, matching the method signature.
  3. Final Answer:

    rb.AddForce(Vector3.up * 10); -> Option A
  4. Quick Check:

    AddForce(Vector3) is correct syntax [OK]
Hint: AddForce needs Vector3 direction and magnitude [OK]
Common Mistakes:
  • Passing separate arguments instead of a Vector3
  • Using non-existent methods like AddForceUp
  • Passing only a number without direction
3. Consider this Unity C# code snippet:
Rigidbody rb = GetComponent<Rigidbody>();
rb.velocity = new Vector3(0, 5, 0);
rb.AddForce(new Vector3(0, 10, 0), ForceMode.Acceleration);
What will be the Rigidbody's velocity immediately after these lines run?
medium
A. Velocity will be (0, 5, 0) and then increase gradually.
B. Velocity will be (0, 10, 0) instantly.
C. Velocity will be (0, 15, 0) instantly.
D. Velocity will be (0, 0, 0) because forces cancel velocity.

Solution

  1. Step 1: Analyze velocity assignment

    Setting rb.velocity to (0,5,0) sets speed instantly upward at 5 units per second.
  2. Step 2: Analyze AddForce with Acceleration mode

    AddForce with ForceMode.Acceleration adds acceleration, so velocity increases gradually over time, not instantly.
  3. Final Answer:

    Velocity will be (0, 5, 0) and then increase gradually. -> Option A
  4. Quick Check:

    Velocity set instantly; force adds gradual acceleration [OK]
Hint: Velocity sets speed instantly; force adds gradual acceleration [OK]
Common Mistakes:
  • Assuming AddForce instantly changes velocity
  • Confusing ForceMode.Acceleration with ForceMode.VelocityChange
  • Thinking forces cancel velocity
4. What is wrong with this Unity C# code to move a Rigidbody upward?
Rigidbody rb = GetComponent<Rigidbody>();
rb.velocity += Vector3.up * 5;
medium
A. You cannot use '+=' operator with velocity; it causes errors.
B. This code instantly adds 5 units upward speed every frame, causing acceleration buildup.
C. Vector3.up is not a valid direction for velocity.
D. Rigidbody velocity cannot be changed directly.

Solution

  1. Step 1: Understand velocity += Vector3.up * 5

    This adds 5 units upward speed to current velocity instantly each time it runs.
  2. Step 2: Identify problem in repeated calls

    If called every frame, velocity keeps increasing, causing unnatural acceleration buildup.
  3. Final Answer:

    This code instantly adds 5 units upward speed every frame, causing acceleration buildup. -> Option B
  4. Quick Check:

    Adding velocity each frame causes speed to grow too fast [OK]
Hint: Adding velocity each frame causes speed to grow too fast [OK]
Common Mistakes:
  • Thinking '+=' on velocity causes syntax errors
  • Believing Vector3.up is invalid
  • Assuming velocity cannot be changed directly
5. You want to make a Rigidbody jump smoothly using physics forces, but also limit its maximum upward speed to 10 units per second. Which approach correctly combines forces and velocity control?
hard
A. Use rb.AddForce(Vector3.up * jumpForce) only and ignore velocity limits.
B. Set rb.velocity = Vector3.up * 10 directly every frame without forces.
C. Use rb.AddForce(Vector3.up * jumpForce) and clamp rb.velocity.y to max 10 after applying force.
D. Set rb.velocity = Vector3.up * jumpForce once and never apply forces.

Solution

  1. Step 1: Use AddForce for smooth jumping

    Applying AddForce lets physics handle smooth acceleration for jump.
  2. Step 2: Clamp velocity to limit max speed

    After applying force, clamp rb.velocity.y to 10 to prevent exceeding max upward speed.
  3. Final Answer:

    Use rb.AddForce(Vector3.up * jumpForce) and clamp rb.velocity.y to max 10 after applying force. -> Option C
  4. Quick Check:

    Force for smooth jump + clamp velocity to limit speed [OK]
Hint: Combine AddForce with velocity clamp to control max speed [OK]
Common Mistakes:
  • Setting velocity directly every frame causing unnatural jumps
  • Ignoring velocity limits causing excessive speed
  • Using only velocity without forces for smooth physics