Cinemachine Camera Jitter in Unity 6? Fix Stutter and Shaking

Illustration: a camera icon with shaky double-outline ghosting snapping into a crisp steady frame

Your character moves smoothly, but the moment the camera follows, everything stutters. Background objects shake, the player seems to vibrate, or the whole view judders at certain speeds. Cinemachine camera jitter in Unity 6 is almost always a timing mismatch: the camera and its target update at different moments. This guide explains why that happens and walks through the fixes in the order that solves most cases, for 3D and 2D games using Cinemachine 3.

Why the Camera Jitters

Unity has two clocks. Update runs once per rendered frame, which might be 60, 144 or a variable rate. FixedUpdate runs physics at a fixed rate, 50 times per second by default. They don’t line up. On some frames physics runs twice, on others not at all.

If the player is a Rigidbody, its position only changes on physics steps. If the camera updates every rendered frame, then on frames where physics didn’t step, the player hasn’t moved but the camera has smoothed toward it. On the next frame the player jumps forward. The result is a regular stutter, worst on high refresh rate monitors.

Every fix below is a way to make the camera and its target agree on when movement happens.

Who Is Jittering: the Player or the World?

Watch closely or record a video and step through it:

  • The player jitters, the background is smooth. The camera is moving smoothly, the target isn’t. Usually a Rigidbody without interpolation.
  • The background jitters, the player is steady. The camera is following an unsmoothed target exactly, so the world appears to stutter. Same root cause, different symptom.
  • Everything shakes at random. Inconsistent frame times, or two scripts fighting over the camera or the target.
  • Only when rotating. Rotation is applied in a different loop from position, or mouse look is in FixedUpdate.

Fix 1: Rigidbody Interpolation

This fixes the majority of cases. Select the player’s Rigidbody (or Rigidbody2D) and set Interpolate to Interpolate. Unity then smooths the rendered position between physics steps, so the Transform moves every frame, not just on physics steps.

Rules for interpolation to work:

  • Move the Rigidbody through physics (linearVelocity, AddForce, MovePosition). Setting transform.position directly breaks interpolation.
  • Don’t also rotate the transform directly every frame. Use rb.MoveRotation in FixedUpdate, or rotate a child visual instead.
  • Interpolate only the objects the camera follows closely. It has a small cost per body.

The Rigidbody jitter guide goes deeper into interpolate vs extrapolate and moving correctly.

Fix 2: Cinemachine Brain Update Method

The CinemachineBrain component on your Main Camera has an Update Method setting:

  • Smart Update (default): Cinemachine tries to detect how each target moves and updates accordingly. Works for most setups once interpolation is on.
  • Late Update: the camera updates after all Update calls. Best when targets move in Update or are interpolated Rigidbodies.
  • Fixed Update: the camera updates in step with physics. Only use this if targets move in FixedUpdate without interpolation, and expect visible stepping at high frame rates.

If jitter persists with interpolation on, try Late Update. Also check Blend Update Method; Late Update is the usual choice there too.

New to Cinemachine 3? The third person camera guide covers the component layout, which changed a lot from version 2.

Fix 3: Move the Target in the Right Place

Consistency matters more than which loop you choose:

  • Rigidbody players: apply forces and velocity in FixedUpdate, read input in Update, interpolation on.
  • CharacterController or transform players: move in Update using Time.deltaTime. Don’t move them in FixedUpdate, or they’ll only change position on physics steps with no interpolation.
  • Mouse look: rotate the camera target in Update or LateUpdate. Mouse delta is already per frame, so don’t multiply it by Time.deltaTime.
  • Follow a child, not the physics body. For first person, Cinemachine often follows a “CameraTarget” child. If the parent is an interpolated Rigidbody, the child is smooth too.

Mixing them, like moving a CharacterController in FixedUpdate while Cinemachine updates in LateUpdate, guarantees stutter.

Fix 4: Damping and Look-Ahead

Damping smooths camera movement, which hides small irregularities but also causes its own problems:

  • Too much damping with a fast target makes the target slide around the screen, which looks like jitter when speed changes. Lower damping on the axis that’s misbehaving.
  • Lookahead (in the Position Composer) predicts movement. With a jittery target it amplifies the jitter. Set Lookahead Time to 0 while debugging, and use Lookahead Smoothing if you keep it.
  • Rotation Composer damping on a target that’s very close to the camera can make tiny movements look big. Increase distance or lower rotation damping.

2D and Pixel Art Jitter

2D games add a separate problem: sub-pixel movement. When the camera sits between pixels, sprites shimmer or wobble.

  • Use the Pixel Perfect Camera component (URP 2D) on the Main Camera, and add the CinemachinePixelPerfect extension to your Cinemachine Camera.
  • Set the Pixel Perfect Camera’s Assets Pixels Per Unit to match your sprites.
  • Keep Rigidbody2D interpolation on.
  • Avoid damping that leaves the camera between pixels for long. Small damping values with pixel snapping look best.

For a simpler 2D setup without Cinemachine, the 2D camera follow guide shows a LateUpdate follow script that avoids these issues.

Other Causes

  • VSync off and uncapped frame rate. Wildly varying frame times make any smoothing look uneven. Enable VSync or set Application.targetFrameRate.
  • Two cameras or two scripts. An old follow script on the Main Camera fighting the CinemachineBrain. Remove other scripts that set camera position.
  • Animator root motion on the target. Root motion applied with Animate Physics on or off can move the target in a different loop. Match it to how the body moves.
  • Editor overhead. Spikes in the Editor (especially with the Scene view open) cause hitches that aren’t in builds. Test in a build before chasing tiny stutters. The Profiler guide shows how to spot frame spikes.

💻 Is it your machine?

Uneven frame times on a struggling laptop make camera stutter worse in the Editor. Our guide to budget laptops for Unity lists machines that hold a steady frame rate.

Troubleshooting

Player jitters but only when the camera follows

Turn on Rigidbody interpolation. This is the most common cause by far.

Jitter only at high refresh rates

The gap between 50 Hz physics and 144 Hz rendering shows up more. Interpolation fixes it. Raising the physics rate also helps but costs CPU.

Jitter appeared after upgrading to Cinemachine 3

Check the Brain’s Update Method and that your old Virtual Camera settings mapped correctly. Damping and lookahead values may have changed during migration.

Camera shakes when rotating with the mouse

Mouse look is in FixedUpdate or multiplied by deltaTime. Move it to Update and remove the deltaTime multiplication.

Only the background jitters

The camera is locked tightly to an unsmoothed target. Interpolate the target, then add slight damping.

FAQ

Should the Cinemachine Brain use FixedUpdate?

Rarely. Only if your target moves in FixedUpdate without interpolation. Interpolation plus Smart or Late Update is smoother.

Does interpolation add input lag?

It renders up to one physics step behind, about 20 ms at 50 Hz. Most players can’t notice it.

Interpolate or Extrapolate?

Interpolate. Extrapolate predicts ahead and overshoots when the body changes direction or hits something.

Why is it smooth in the build but not the Editor?

The Editor has extra overhead and uneven frame times. Always confirm camera issues in a build.

Can I fix jitter by raising the physics rate?

It reduces it, but costs CPU and doesn’t fully remove it. Interpolation is the real fix.

Comments

Leave a Reply

Your email address will not be published. Required fields are marked *