Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124
Physical Address
304 North Cardinal St.
Dorchester Center, MA 02124


Time.fixedDeltaTime; default 0.02 s). Use for physics—Rigidbody.AddForce, setting velocity, MovePosition/MoveRotation.Unity’s main loop separates visual frames from physics simulation. Update is called once per rendered frame; its interval is variable and depends on framerate. FixedUpdate is called at consistent intervals determined by Time.fixedDeltaTime. If the game stutters, Unity may call FixedUpdate multiple times in a single frame to keep the physics world in sync.
Because physics requires determinism across timesteps, FixedUpdate is where you should interact with rigidbodies. Meanwhile, responsiveness to player input and UI should happen in Update so that it’s in step with the current frame. That’s the essence of unity update vs fixedupdate in practical terms.
Use Update for things that should happen once per frame, tied to the camera and input:
Input.GetAxis, Input.GetButtonDown) or the newer Input System actions.// Read input each frame, move a CharacterController (not a Rigidbody)
public class PlayerController : MonoBehaviour
{
public CharacterController controller;
public float speed = 6f;
void Update()
{
float h = Input.GetAxisRaw("Horizontal");
float v = Input.GetAxisRaw("Vertical");
Vector3 dir = new Vector3(h, 0, v).normalized;
if (dir.sqrMagnitude > 0.001f)
{
controller.Move(dir * speed * Time.deltaTime);
}
}
}
Note how Time.deltaTime is used to keep movement frame-rate independent. For unity update vs fixedupdate, this is the Update side: reading input and moving non-physics objects.
FixedUpdate is the “physics lane”. Apply forces, set velocities, or use Rigidbody.MovePosition/MoveRotation here. Read Time.fixedDeltaTime if you need the timestep value.
// Read input in Update, apply to Rigidbody in FixedUpdate (best practice)
public class PhysicsMover : MonoBehaviour
{
public Rigidbody rb;
public float acceleration = 12f;
public float maxSpeed = 8f;
private Vector2 inputVector; // cached intent from Update
void Update()
{
// Input is frame-based; capture here.
inputVector.x = Input.GetAxisRaw("Horizontal");
inputVector.y = Input.GetAxisRaw("Vertical");
}
void FixedUpdate()
{
// Convert intent to world-space force each physics tick.
Vector3 force = new Vector3(inputVector.x, 0f, inputVector.y).normalized * acceleration;
rb.AddForce(force, ForceMode.Acceleration);
// Clamp velocity for tighter control.
Vector3 v = rb.velocity;
v = Vector3.ClampMagnitude(v, maxSpeed);
rb.velocity = v;
}
}
If you prefer kinematic movement with physics contacts, use Rigidbody.MovePosition in FixedUpdate:
void FixedUpdate()
{
Vector3 desired = transform.position + moveDir * speed * Time.fixedDeltaTime;
rb.MovePosition(desired);
}
These patterns keep physics stable and are the core of unity update vs fixedupdate in real projects.
Project Settings → Time → Fixed Timestep. Default is 0.02 seconds (50 Hz). Physics ticks use this value.Symptoms of mixing lanes in unity update vs fixedupdate: jittery rigidbody motion (you moved it in Update), input lag (you read input in FixedUpdate), or tunneling (you teleported a dynamic rigidbody each frame). All of these stem from misunderstanding how unity update vs fixedupdate behave under stress.
Modern controllers poll once per frame. So capture the player’s intent in Update, store it, and consume that cached value inside FixedUpdate. This ensures responsive input while keeping physics deterministic. With the new Input System, subscribe to actions (frame events) and still apply physics changes in FixedUpdate—the standard bridge for unity update vs fixedupdate.
// Minimal "bridge" pattern
Vector2 _moveIntent;
void Update() {
_moveIntent = _inputActions.Player.Move.ReadValue<Vector2>();
}
void FixedUpdate() {
ApplyMovement(_moveIntent); // physics side
}
Use Update with CharacterController.Move. Gravity can be applied manually. This keeps you entirely in the frame loop—no rigidbody needed. In unity update vs fixedupdate terms: CharacterController lives in Update.
rb.velocity or MovePosition in FixedUpdate.AddForce/AddTorque in FixedUpdate.Exactly the same idea as 3D: do physics work in FixedUpdate and enable interpolation for smoother rendering—another staple of unity update vs fixedupdate best practice.
If a rigidbody is kinematic, use MovePosition/MoveRotation in FixedUpdate to interact correctly with dynamic bodies (triggers, contacts, etc.). This keeps you aligned with unity update vs fixedupdate responsibilities.
WaitForFixedUpdate aligns a coroutine to the next physics tick if you need sequencing without writing FixedUpdate code.| Aspect | Update | FixedUpdate |
|---|---|---|
| Frequency | Once per frame (variable) | Fixed interval (Time.fixedDeltaTime) |
| Best for | Input, UI, non-physics, timers | Rigidbody physics, forces, velocity |
| Delta time | Time.deltaTime |
Time.fixedDeltaTime |
| Can run multiple times per frame? | No | Yes (catch-up) |
| Interpolation needed? | Not for transforms you move here | Often yes (Rigidbody Interpolate) |
| Typical pitfalls | Moving dynamic rigidbodies here → jitter | Reading input here → laggy controls |
MovePosition or velocities to respect contacts.When you hit any of these problems, revisit your lane choice—correcting the split in unity update vs fixedupdate usually fixes the symptom immediately.
You can, but you gain nothing and risk visual jitter. If there’s no rigidbody involved, Update is simpler and perfectly fine—one more way to keep unity update vs fixedupdate responsibilities clean.
As many as needed to catch up with time, bounded by Maximum Allowed Timestep. That’s why rigidbody work belongs here and not in Update, a core principle in unity update vs fixedupdate.
Usually in LateUpdate, after player and world objects move. This prevents one-frame lag or wobble and complements the unity update vs fixedupdate split.
No. It’s a kinematic collider that you drive yourself, typically from Update using Move. This keeps you on the Update side of unity update vs fixedupdate.
No. You still read actions on the frame (Update) and apply physics in FixedUpdate. The bridge pattern is the recommended approach for unity update vs fixedupdate with both input systems.
Think of Unity’s loops as two lanes: the frame lane for input and visuals (Update) and the physics lane for deterministic motion (FixedUpdate). When you follow this split, movement is smooth on fast PCs and slow phones alike. If you’re ever unsure about unity update vs fixedupdate, ask: “Does this touch a rigidbody?” If yes, choose FixedUpdate; if not, Update or LateUpdate is your friend—and your game will feel better immediately.