Skip to main content
camera-rigs is a skill from the Summer skill library: a guide your AI agent reads when the task matches, so it builds the good version on the first try. Camera rigs: Camera2D follow with limits, first-person head, SpringArm3D third-person, top-down, FOV.

When your agent uses it

  • Black screen on play, or the camera shows past the level edge
  • Jerky camera follow, wrong FOV, or the third-person camera clips into walls
  • Need a top-down, isometric, orthographic, orbit, or spring-arm camera

Install

summer setup installs every skill for your agent. To add only this one:
Swap claude-code for your agent, such as codex or cursor. See Skills for every option.

The skill

One rule above all: exactly ONE camera is active. In 3D that is the single Camera3D with current = true; two current cameras = flicker or the wrong view, and a scene with no current camera renders nothing in the game. In 2D a Camera2D is active when enabled = true (the default) and it is in the tree; with several enabled cameras, call make_current() on the one you want. Trigger phrases: “black screen on play”, “camera shows past the level edge”, “jerky follow”, “wrong FOV”, “I need a top-down / isometric / orbit camera”. Ops use engine variant strings ("Vector3(0, 5, 10)"), never JSON objects ({x: 0, y: 5, z: 10} fails). Every mutation names its scene: pass the exact scenePath (e.g. res://main.tscn). One summer_batch per rig saves the scene once; the examples below use it.

2D follow camera

Add the Camera2D as a CHILD of the player so it follows for free, then smooth it and clamp it to the level.
  • Smoothing speed 5-8 feels responsive; higher = tighter, lower = drifty.
  • Set limits to the actual level bounds (the numbers above are placeholders). limit_smoothing_enabled = true avoids a hard stop at the edge.
  • Zoom Vector2(2, 2) zooms IN (bigger), Vector2(0.5, 0.5) zooms OUT (top-down).

2D top-down camera

Same as above minus the platformer edge-lock urgency. Zoom out to show the field (Vector2(0.5, 0.5)). Keep it centered on the player; no vertical bias.

3D first-person camera

Camera is a child of a Head node on the player. Body yaws, Head pitches. See the character-movement skill (its 3D movement reference: summer_docs_read id skill/character-movement/references/movement-3d.md) or fps-controller for the look script. FOV 70-75, near 0.05.

3D third-person camera (spring arm)

The SpringArm3D pushes the camera in when a wall is behind the player, so it never clips through geometry. This is the correct third-person rig - do not just park a Camera3D behind the player.
Set collision_mask to the LEVEL layer only. If it includes the player layer the arm collapses to length 0 and you see inside the character (a controller script can also call add_excluded_object(get_rid()) on the arm).

Orthographic top-down 3D (twin-stick, strategy, isometric)

projection = 1 is orthogonal. size is the vertical world units shown - bigger = more zoomed out. For isometric, rotate ~(-30, 45, 0) instead of straight down.

FOV guidance

  • 60-75: most 3D games. 90+: fast FPS (feels faster, more peripheral).
  • Under 40 or over 110 distorts. Never animate FOV wildly; a small kick (+8 on sprint, tweened back) reads as speed.

Verify

A camera is only proven by a frame. After the rig is in, summer_play, then summer_screenshot with target: "game", then summer_stop; or save frames from a RunVerification probe while the player moves (see playtesting-a-feature). An editor viewport screenshot shows the editor’s camera, not the game’s.

Troubleshooting

From a shell

No Summer MCP tools in this session? Run each one as a command; when summer --version is missing or below 4.0, use npx -y summer-engine@latest in place of summer. Fields are flags in kebab-case (--scene-path res://main.tscn) or one --input '<json>', and summer ops describe <op> prints the exact input. The summer-cli skill has the rest.
  • make-game: Orchestrate ‘make me a game’: brainstorm, plan, scaffold, mechanics, art, audio, polish, verify, ship.
  • character-movement: Player controllers for 2D and 3D, plus the standard third-person controller for Summer humanoids.
  • fps-controller: First-person controller: WASD, mouse look, jump, coyote time, jump buffering, air control.

Source: library/skills/camera-rigs/SKILL.md, rendered from summer-engine@4.3.0 on npm.