Bird
Raised Fist0
Unityframework~10 mins

Rigidbody2D component 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 - Rigidbody2D component
Add Rigidbody2D to GameObject
Physics Engine Controls Movement
Apply Forces or Velocity
Update Position & Rotation
Collision Detection & Response
Repeat Each Frame
The Rigidbody2D component lets Unity's physics engine move and rotate a 2D object by applying forces and detecting collisions every frame.
Execution Sample
Unity
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(5, 0);
// Moves object right at speed 5

void FixedUpdate() {
  rb.AddForce(new Vector2(0, 10));
}
This code sets a 2D object's velocity to move right and applies an upward force every physics update.
Execution Table
StepActionVelocityPosition ChangeNotes
1Set velocity to (5,0)(5,0)Object starts moving rightInitial velocity set
2Physics update applies velocity(5,0)Position moves right by velocity * deltaTimeObject moves right
3Add upward force (0,10)(5, small positive Y)Velocity Y increases slightlyForce changes velocity
4Physics update applies new velocity(5, increased Y)Position moves right and upObject moves diagonally
5Repeat physics updatesVelocity changes by forces and dragPosition updates accordinglyContinuous movement and collision handling
6Collision detectedVelocity may changePosition adjusted by collision responseObject reacts to collisions
7No more forces appliedVelocity decreases due to dragMovement slowsObject eventually stops if no forces
8End of traceFinal velocity and positionFinal position after updatesSimulation continues each frame
💡 Simulation runs continuously; this trace shows initial velocity and force effects over a few physics updates.
Variable Tracker
VariableStartAfter Step 1After Step 3After Step 4Final
rb.velocity(0,0)(5,0)(5, small positive Y)(5, increased Y)Varies with forces and drag
Position(x0,y0)(x0 + deltaX, y0)(x0 + deltaX, y0 + deltaY)(x0 + deltaX2, y0 + deltaY2)Updates each frame
Key Moments - 3 Insights
Why does the velocity change after applying AddForce even though we set velocity directly before?
Setting velocity directly (Step 1) sets initial speed. AddForce (Step 3) adds acceleration, changing velocity over time as physics updates (see Steps 3 and 4 in execution_table).
Does Rigidbody2D move the object instantly when velocity changes?
No, Rigidbody2D updates position during physics steps (Step 2 and 4). Velocity affects how much position changes each frame, not instant teleport.
What happens when a collision occurs to velocity and position?
Collision changes velocity and adjusts position to prevent overlap (Step 6). Rigidbody2D handles this automatically during physics updates.
Visual Quiz - 3 Questions
Test your understanding
Look at the execution_table at Step 3. What happens to the velocity after AddForce is applied?
AVelocity's Y component increases slightly
BVelocity resets to zero
CVelocity's X component becomes zero
DVelocity does not change
💡 Hint
Check the 'Velocity' column at Step 3 in execution_table.
At which step does the object start moving diagonally?
AStep 1
BStep 2
CStep 4
DStep 6
💡 Hint
Look for when velocity has both X and Y components in execution_table.
If no forces are applied after Step 6, what happens to velocity over time?
AVelocity increases
BVelocity decreases due to drag
CVelocity stays constant
DVelocity instantly becomes zero
💡 Hint
See the 'Velocity' and 'Notes' columns at Step 7 in execution_table.
Concept Snapshot
Rigidbody2D lets Unity move 2D objects using physics.
Set velocity to control speed directly.
Use AddForce to apply acceleration.
Physics updates position each frame.
Collisions change velocity and position automatically.
Drag slows velocity if no forces act.
Full Transcript
The Rigidbody2D component in Unity controls 2D object movement using physics. When you add Rigidbody2D to a game object, Unity's physics engine updates its position and rotation every frame. You can set the velocity directly to move the object at a constant speed, or apply forces to accelerate it. Each physics update applies velocity to change position. Collisions are detected and handled automatically, adjusting velocity and position to prevent overlaps. Velocity changes gradually with forces and drag, so the object moves smoothly. This trace shows setting velocity to move right, then adding an upward force to move diagonally, and how collisions and drag affect movement over time.

Practice

(1/5)
1. What is the primary purpose of the Rigidbody2D component in Unity?
easy
A. To make 2D objects move and react using physics
B. To display 2D sprites on the screen
C. To handle user input for 2D games
D. To create UI elements in 2D games

Solution

  1. Step 1: Understand Rigidbody2D role

    The Rigidbody2D component applies physics to 2D objects, enabling movement and reactions.
  2. Step 2: Compare with other options

    Options A, B, and D relate to input, sprites, and UI, not physics behavior.
  3. Final Answer:

    To make 2D objects move and react using physics -> Option A
  4. Quick Check:

    Rigidbody2D = physics movement [OK]
Hint: Rigidbody2D controls physics, not visuals or input [OK]
Common Mistakes:
  • Confusing Rigidbody2D with sprite rendering
  • Thinking Rigidbody2D handles input
  • Mixing Rigidbody2D with UI components
2. Which of the following is the correct way to add a Rigidbody2D component to a GameObject in C# script?
easy
A. gameObject.AddComponent<SpriteRenderer>();
B. gameObject.AddComponent<Rigidbody2D>();
C. gameObject.AddComponent<Collider2D>();
D. gameObject.AddComponent<Rigidbody>();

Solution

  1. Step 1: Identify correct component type

    Rigidbody2D is the correct physics component for 2D objects, so use AddComponent<Rigidbody2D>().
  2. Step 2: Check other options

    A adds SpriteRenderer, gameObject.AddComponent<Rigidbody>(); adds 3D Rigidbody, C adds Collider2D, which are different components.
  3. Final Answer:

    gameObject.AddComponent<Rigidbody2D>(); -> Option B
  4. Quick Check:

    Add Rigidbody2D with AddComponent<Rigidbody2D>() [OK]
Hint: Use AddComponent<Rigidbody2D>() for 2D physics [OK]
Common Mistakes:
  • Using Rigidbody instead of Rigidbody2D
  • Adding Collider2D instead of Rigidbody2D
  • Confusing SpriteRenderer with Rigidbody2D
3. Consider this code snippet in Unity C#:
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.velocity = new Vector2(5, 0);
Debug.Log(rb.position);
What will be printed in the console immediately after this code runs?
medium
A. The new position after moving 5 units on the x-axis
B. Zero vector (0,0) always
C. An error because velocity cannot be set directly
D. The current position of the Rigidbody2D before moving

Solution

  1. Step 1: Understand Rigidbody2D velocity effect

    Setting velocity changes movement over time, but position updates in the next physics frame, not immediately.
  2. Step 2: Analyze Debug.Log timing

    Debug.Log prints current position instantly, before Rigidbody2D moves, so it shows the original position.
  3. Final Answer:

    The current position of the Rigidbody2D before moving -> Option D
  4. Quick Check:

    Velocity changes future movement, position now = original [OK]
Hint: Velocity changes position next frame, not instantly [OK]
Common Mistakes:
  • Assuming position updates immediately after velocity set
  • Expecting error when setting velocity directly
  • Thinking position always zero
4. You wrote this code to apply a force to a Rigidbody2D:
Rigidbody2D rb = GetComponent<Rigidbody2D>();
rb.AddForce(new Vector2(10, 0));
But the object does not move. What is the most likely reason?
medium
A. AddForce only works with 3D Rigidbody, not Rigidbody2D
B. The force vector is too small to move the object
C. The Rigidbody2D's Body Type is set to Static
D. You need to call rb.MovePosition() instead

Solution

  1. Step 1: Check Rigidbody2D Body Type effect

    If Body Type is Static, physics forces do not move the object.
  2. Step 2: Evaluate other options

    Force vector (10,0) is enough; AddForce works with Rigidbody2D; MovePosition is for manual moves, not force.
  3. Final Answer:

    The Rigidbody2D's Body Type is set to Static -> Option C
  4. Quick Check:

    Static body ignores forces [OK]
Hint: Static Rigidbody2D ignores forces; use Dynamic [OK]
Common Mistakes:
  • Using Static body type expecting movement
  • Thinking AddForce is invalid for Rigidbody2D
  • Confusing MovePosition with AddForce
5. You want to create a 2D game object that moves left and right smoothly using physics and stops instantly when no input is given. Which Rigidbody2D settings and code approach should you use?
hard
A. Set Body Type to Dynamic, use rb.velocity to set horizontal speed, and set velocity to zero when no input
B. Set Body Type to Kinematic, use rb.AddForce to move, and rely on friction to stop
C. Set Body Type to Static, move object by changing transform.position directly
D. Set Body Type to Dynamic, use rb.MovePosition for movement, and ignore velocity

Solution

  1. Step 1: Choose Rigidbody2D Body Type for physics movement

    Dynamic body type allows physics-based movement and velocity control.
  2. Step 2: Use velocity for smooth movement and instant stop

    Setting rb.velocity directly controls speed and can be set to zero to stop immediately.
  3. Step 3: Evaluate other options

    Kinematic bodies don't respond to forces; Static bodies don't move; MovePosition is for manual moves, not smooth physics velocity control.
  4. Final Answer:

    Set Body Type to Dynamic, use rb.velocity to set horizontal speed, and set velocity to zero when no input -> Option A
  5. Quick Check:

    Dynamic + velocity control = smooth move and instant stop [OK]
Hint: Use Dynamic Rigidbody2D and set velocity for smooth control [OK]
Common Mistakes:
  • Using Static or Kinematic body types for physics movement
  • Relying on AddForce without velocity control for instant stop
  • Moving object by transform.position ignoring physics