

Physics jitter is one of the most frustrating issues Unity developers face. Objects appear to shake, stutter, snap back, or teleport slightly instead of moving smoothly. This problem is especially common when using Rigidbody, player controllers, cameras, or networked objects.
This article explains what causes physics jitter in Unity, why teleportation and jerky movement happen, and how to fix them using reliable, production-safe patterns.
Physics jitter occurs when an object’s visual position does not update smoothly from frame to frame. Instead of continuous motion, the object appears to vibrate, snap, or briefly teleport.
Typical symptoms include:
Physics jitter almost always comes from a mismatch between Unity’s physics system and the frame update loop.
Unity’s physics engine runs in fixed time steps, not per frame. When you move a Rigidbody in Update(), its position is modified at an inconsistent rate, causing jitter.
Incorrect approach:
void Update() {
transform.position += Vector3.forward * speed * Time.deltaTime;
}
This bypasses the physics engine and leads to unstable movement.
Correct approach:
void FixedUpdate() {
rb.MovePosition(rb.position + Vector3.forward * speed * Time.fixedDeltaTime);
}
Directly modifying transform.position on a GameObject that has a Rigidbody causes Unity to fight itself. The physics engine tries to correct the position every frame.
This often results in teleportation or snapping.
Wrong pattern:
transform.position = targetPosition;
Correct pattern:
rb.MovePosition(targetPosition);
If you must control position manually, set the Rigidbody to kinematic.
Camera jitter is extremely common when following a physics-based player.
Problematic setup:
void Update() {
camera.transform.position = player.transform.position + offset;
}
The player moves in FixedUpdate(), while the camera updates every frame, causing visible jitter.
Correct solution:
void LateUpdate() {
camera.transform.position = player.transform.position + offset;
}
LateUpdate() ensures the camera updates after all physics movement.
By default, Rigidbody interpolation may be disabled. This causes visible jitter when physics updates are slower than rendering.
Fix:
InterpolateThis smooths visual movement between physics updates.
If Time.fixedDeltaTime is too high or inconsistent, physics updates will feel jerky.
Recommended default:
Time.fixedDeltaTime = 0.02f; // 50 physics updates per second
Lower-end devices may require tuning this value carefully.
In multiplayer games, physics jitter often comes from server position corrections.
Symptoms include:
Solution patterns include interpolation and prediction:
transform.position = Vector3.Lerp(
transform.position,
serverPosition,
Time.deltaTime * smoothing
);
All Rigidbody movement and forces should be applied in FixedUpdate().
void FixedUpdate() {
rb.AddForce(moveDirection * speed);
}
This is one of the simplest and most effective fixes for jitter.
A common professional approach is to separate the visual model from the physics body.
Unwanted rotation can cause visible jitter.
rb.constraints = RigidbodyConstraints.FreezeRotationX |
RigidbodyConstraints.FreezeRotationZ;
Fast-moving objects can jitter due to collision corrections.
Set Rigidbody Collision Detection to:
ContinuousContinuous DynamicUnity physics jitter is not a single bug, but a collection of common mistakes related to timing, movement methods, and update order. Teleportation and jerky movement usually happen when physics and rendering fall out of sync.
By respecting Unity’s physics lifecycle, using FixedUpdate correctly, enabling interpolation, and separating visuals from physics logic, you can eliminate jitter and achieve smooth, professional-grade movement in your Unity projects.