PHYSICS • CAMERA JITTER

Unity Transform.Translate Stuttering, Jittering & Passing Through Walls

Understand why direct transform positioning bypasses physics interpolation, clips through colliders, and produces camera micro-stuttering on 120Hz/144Hz displays.

The Architectural Difference

transform.Translate() teleports the GameObject coordinates each frame without consulting the PhysX engine. When a camera tracks a teleporting object, frame rate variations cause perceptible jitter. Switching to rb.MovePosition() inside FixedUpdate() with Interpolate enabled creates silky-smooth 60 FPS motion.

1

Silky Smooth Rigidbody Movement Replacement

SmoothPhysicsMovement.cs (C#)
using UnityEngine;

[RequireComponent(typeof(Rigidbody))]
public class SmoothPhysicsMovement : MonoBehaviour
{
    [SerializeField] private float moveSpeed = 12f;

    private Rigidbody rb;
    private Vector3 movementInput;

    private void Awake()
    {
        rb = GetComponent<Rigidbody>();
        rb.interpolation = RigidbodyInterpolation.Interpolate; // KEY FOR ZERO JITTER
    }

    private void Update()
    {
        // Gather input smoothly in Update
        float h = Input.GetAxisRaw("Horizontal");
        float v = Input.GetAxisRaw("Vertical");
        movementInput = new Vector3(h, 0f, v).normalized;
    }

    private void FixedUpdate()
    {
        // ❌ BAD: transform.Translate(movementInput * moveSpeed * Time.deltaTime);

        // ✅ GOOD: Move using Rigidbody physics in FixedUpdate
        Vector3 targetPos = rb.position + (movementInput * (moveSpeed * Time.fixedDeltaTime));
        rb.MovePosition(targetPos);
    }
}

Related Physics Guides