---
name: godot-game-builder
description: "Build 2D and 3D games in Godot. GDScript, scene composition, state machines, export pipelines. Senior Godot dev as a skill. Designs node trees, writes idiomatic GDScript (or C# if you prefer), wires up input maps, manages scene transitions, and configures export presets for desktop + web + mobile."
license: MIT
---

# Godot Game Builder

A senior Godot engineer available as a skill. It designs node trees, writes idiomatic GDScript (or C# if that's your stack), wires input maps, handles scene transitions, and configures export presets for desktop, web, and mobile. Built for solo devs and small teams using Godot 4.x who want correct architecture instead of copy-pasted tutorial code.

## When to use it

- You're starting a project and need a sane scene/node structure rather than one giant `Main` script.
- You have a player that needs movement, gravity, and animation states and want a clean state machine instead of a tangle of `if` flags.
- A scene won't transition, a signal isn't firing, or `_physics_process` math is off.
- You're ready to ship and need `export_presets.cfg` set up for Windows, Linux, the web (WASM), or Android.

## How it works

It works in real Godot terms. For 2D it reaches for `CharacterBody2D` with `move_and_slide()` and `velocity`; for 3D, `CharacterBody3D` and `Node3D` hierarchies. It connects signals (`button.pressed.connect(_on_pressed)`), defines actions in the Input Map and reads them via `Input.is_action_pressed("jump")`, and loads scenes through `get_tree().change_scene_to_file("res://levels/level_2.tscn")` or `change_scene_to_packed()` for preloaded `PackedScene`s. State machines are typically modeled as child `Node`s with `enter()`/`exit()`/`update(delta)` methods, or an `enum` plus `match`. It respects `@onready`, `@export`, `class_name`, and `_ready()`/`_process()`/`_physics_process()` conventions, and keeps assets under `res://` with `.tscn`/`.tres` resources.

## Example

```bash
curl -fsSL --create-dirs -o ~/.claude/skills/godot-game-builder/SKILL.md https://claudeskil.com/skills/godot-game-builder/SKILL.md

# then, in your project:
"Add a double-jump and coyote time to my CharacterBody2D player,
 driven by a state machine, and export a web build."
```

```gdscript
extends CharacterBody2D

const SPEED := 200.0
const JUMP_VELOCITY := -380.0

func _physics_process(delta: float) -> void:
    if not is_on_floor():
        velocity += get_gravity() * delta
    if Input.is_action_just_pressed("jump") and is_on_floor():
        velocity.y = JUMP_VELOCITY
    velocity.x = Input.get_axis("move_left", "move_right") * SPEED
    move_and_slide()
```

## Tips & gotchas

- Put movement in `_physics_process`, not `_process` — physics runs at a fixed tick, so frame-rate-independent motion lives there.
- Godot 4 renamed plenty: it's `get_gravity()`, `change_scene_to_file()`, and `Tween` is created via `create_tween()`. The skill targets 4.x and will flag 3.x snippets.
- For web exports, your HTTP host must send the `Cross-Origin-Opener-Policy` and `Cross-Origin-Embedder-Policy` headers or threads/WASM will fail to load.
- Prefer composition (small reusable scenes) over deep inheritance; instance scenes with `preload()` + `instantiate()`.

## FAQ

**GDScript or C#?** Either. GDScript is the default and fastest to iterate; ask for C# and it uses the .NET (Mono) workflow with `[Export]` and `[Signal]` attributes.

**Does it cover 3D?** Yes — `CharacterBody3D`, cameras, lighting, and navigation, not just 2D platformers.

**Which Godot version?** Godot 4.x. APIs and exports assume 4.x defaults.
