Quick answer: Animate zoom with a Tween over 0.3–0.5s. Optionally disable position_smoothing during the tween to avoid combined motion artifacts. Use create_tween().tween_property for clean interpolation.
Player presses zoom-out. Camera jitters along the path because position smoothing fights the zoom change.
The Symptom
Camera jitters or oscillates during zoom transitions. Smooth at static zoom levels.
The Fix
extends Camera2D
func zoom_to(target: float, duration := 0.4) -> void:
position_smoothing_enabled = false
var tween := create_tween()
tween.tween_property(self, "zoom", Vector2(target, target), duration)
await tween.finished
position_smoothing_enabled = true
Disable smoothing during the tween; re-enable after. Zoom interpolates cleanly without fighting position lerp.
Verifying
Trigger zoom changes during gameplay. Smooth, no jitter. Smoothing returns for normal follow.
“Tween zoom. Suspend smoothing. Re-enable. Smooth.”
Related Issues
For physics interpolation, see interpolation. For Sprite3D billboard, see billboard.
Tween. Pause smoothing. No fight.