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);
}
}