godot-camera-systems
Installation
SKILL.md
NEVER Do
- NEVER use
global_position = target.global_positionevery frame — Instant position matching causes jittery movement. Uselerp()orposition_smoothing_enabled = true. - NEVER use
offsetfor permanent camera positioning —offsetis for shake, sway, or temporary recoil effects only. Usepositionfor permanent framing. - NEVER forget
limit_smoothed = trueforCamera2D— Hard boundaries cause jarring visual stops. - NEVER enable multiple
Camera2Dnodes in the same viewport simultaneously — Only the last enabled camera takes precedence. Explicitly disable inactive cameras. - NEVER use
SpringArm3Dwithout a collision mask — It will clip through terrain and walls. Set it to the world/environment layer. - NEVER implement screen shake by randomizing
position(orrandfonoffsetas 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
SubViewportdefaults for Mini-maps — Setrender_target_update_modetoUPDATE_WHEN_VISIBLEor a lower fixed rate. - NEVER use linear interpolation for Zoom — Prefer exponential lerp or Tween
TRANS_CUBIC.