godot-camera-systems

Installation
SKILL.md

NEVER Do

  • NEVER use global_position = target.global_position every frame — Instant position matching causes jittery movement. Use lerp() or position_smoothing_enabled = true.
  • NEVER use offset for permanent camera positioningoffset is for shake, sway, or temporary recoil effects only. Use position for permanent framing.
  • NEVER forget limit_smoothed = true for Camera2D — Hard boundaries cause jarring visual stops.
  • NEVER enable multiple Camera2D nodes in the same viewport simultaneously — Only the last enabled camera takes precedence. Explicitly disable inactive cameras.
  • NEVER use SpringArm3D without a collision mask — It will clip through terrain and walls. Set it to the world/environment layer.
  • NEVER implement screen shake by randomizing position (or randf on offset as the whole system) — Use a dedicated Trauma/Noise system layered on follow (camera_shake_trauma_pro.gd).
  • NEVER parent the Camera directly to a high-speed physics body as the default rig — Physics stutter or parent rotation causes motion sickness. Prefer RemoteTransform2D/3D / phantom decoupling with rotation sync disabled (remote_transform_decoupling.gd, phantom_decoupling.gd).
  • NEVER use look_at() in 3D without a fallback for the 'Up' vector — Targets directly above/below flip the camera; use guards or Quaternion math.
  • NEVER rely on SubViewport defaults for Mini-maps — Set render_target_update_mode to UPDATE_WHEN_VISIBLE or a lower fixed rate.
  • NEVER use linear interpolation for Zoom — Prefer exponential lerp or Tween TRANS_CUBIC.

Parenting / Decoupling (resolved)

Installs
334
GitHub Stars
600
First Seen
Feb 10, 2026
godot-camera-systems — thedivergentai/gd-agentic-skills