Rigidbody forces and velocity let you move objects in a game realistically. They help objects react to pushes, pulls, and speed changes like in real life.
Rigidbody forces and velocity in Unity
Start learning this pattern below
Jump into concepts and practice - no test required
or
Test this pattern10 questions across easy, medium, and hard to know if this pattern is strong
Introduction
Syntax
Unity
Rigidbody rb; // Add a force to the Rigidbody rb.AddForce(Vector3 force, ForceMode mode = ForceMode.Force); // Set the velocity directly rb.velocity = new Vector3(x, y, z);
AddForce applies a push or pull over time, affected by mass.
Velocity sets the speed and direction instantly, overriding current movement.
Examples
Unity
rb.AddForce(new Vector3(0, 10, 0));
Unity
rb.AddForce(new Vector3(5, 0, 0), ForceMode.Impulse);
Unity
rb.velocity = new Vector3(0, 5, 0);
Sample Program
This script moves an object with a Rigidbody. Press Space to jump up with a quick force. Press V to move right by setting velocity directly.
Unity
using UnityEngine; public class MoveObject : MonoBehaviour { private Rigidbody rb; void Start() { rb = GetComponent<Rigidbody>(); } void Update() { if (Input.GetKeyDown(KeyCode.Space)) { // Apply an instant upward force rb.AddForce(new Vector3(0, 300, 0), ForceMode.Impulse); } if (Input.GetKeyDown(KeyCode.V)) { // Set velocity directly to move right rb.velocity = new Vector3(5, rb.velocity.y, 0); } } }
Important Notes
Use AddForce for natural pushes that respect mass and drag.
Use velocity to instantly change speed, but it can ignore physics effects.
Always get the Rigidbody component before applying forces or velocity.
Summary
Rigidbody forces push or pull objects over time.
Velocity sets object speed instantly.
Use forces for realistic physics and velocity for direct control.
Practice
1. In Unity, what is the main difference between applying a force to a Rigidbody and setting its velocity directly?
easy
Solution
Step 1: Understand force effect on Rigidbody
Applying a force adds acceleration, so velocity changes smoothly over time.Step 2: Understand velocity setting
Setting velocity directly changes speed and direction immediately without gradual acceleration.Final Answer:
Applying a force changes velocity gradually, setting velocity changes it instantly. -> Option DQuick 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
Solution
Step 1: Check AddForce method signature
Unity's Rigidbody.AddForce expects a Vector3 representing force direction and magnitude.Step 2: Verify correct usage
Using Vector3.up * 10 applies force upwards with magnitude 10, matching the method signature.Final Answer:
rb.AddForce(Vector3.up * 10); -> Option AQuick 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
Solution
Step 1: Analyze velocity assignment
Setting rb.velocity to (0,5,0) sets speed instantly upward at 5 units per second.Step 2: Analyze AddForce with Acceleration mode
AddForce with ForceMode.Acceleration adds acceleration, so velocity increases gradually over time, not instantly.Final Answer:
Velocity will be (0, 5, 0) and then increase gradually. -> Option AQuick 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
Solution
Step 1: Understand velocity += Vector3.up * 5
This adds 5 units upward speed to current velocity instantly each time it runs.Step 2: Identify problem in repeated calls
If called every frame, velocity keeps increasing, causing unnatural acceleration buildup.Final Answer:
This code instantly adds 5 units upward speed every frame, causing acceleration buildup. -> Option BQuick 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
Solution
Step 1: Use AddForce for smooth jumping
Applying AddForce lets physics handle smooth acceleration for jump.Step 2: Clamp velocity to limit max speed
After applying force, clamp rb.velocity.y to 10 to prevent exceeding max upward speed.Final Answer:
Use rb.AddForce(Vector3.up * jumpForce) and clamp rb.velocity.y to max 10 after applying force. -> Option CQuick 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
