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:
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 singleCamera3D 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 theCamera2D 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 = trueavoids 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 aHead 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)
TheSpringArm3D 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.
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; whensummer --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.
Related skills
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.
