一键导入
godot-debugging
Debug Godot 4.x errors, crashes, and Godot-3→4 API confusion.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
菜单
Debug Godot 4.x errors, crashes, and Godot-3→4 API confusion.
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Compose concept-art briefs from the project's GDD and run the generate→review→lock/regen loop on a persistent concept board (docs/concept-art/board.md).
Check recent Godot code changes against the project's GDD + design pillars for alignment.
Author/update a Godot project's GDD as a docs/gdd/ Obsidian folder (index + section notes).
Fetch a YouTube video as readable markdown (title, channel, description, clean transcript). WebFetch can't read YouTube — this wraps a tested yt-dlp pipeline.
Scaffold a new Godot scene + script following this project's existing layout + conventions.
Godot 4.x GDScript architecture patterns + naming/typing conventions.
| name | godot-debugging |
| description | Debug Godot 4.x errors, crashes, and Godot-3→4 API confusion. |
| model | sonnet |
| allowed-tools | Read, Grep, Glob, Bash(grep *), mcp__claude_ai_Context7__resolve-library-id, mcp__claude_ai_Context7__query-docs |
print_stack() for call chain, not just print()Models frequently suggest deprecated Godot 3 APIs. Always use the Godot 4 equivalents:
| Godot 3 (WRONG) | Godot 4 (CORRECT) | Notes |
|---|---|---|
deg2rad() | deg_to_rad() | All math utils renamed |
rand_range() | randf_range() | Also randi_range() for int |
connect("signal", obj, "method") | signal_name.connect(callable) | Callable-based signals |
move_and_slide(velocity, up) | move_and_slide() | velocity is now a property |
BUTTON_LEFT | MOUSE_BUTTON_LEFT | All input enums renamed |
yield(obj, "signal") | await obj.signal | yield removed entirely |
instance() | instantiate() | PackedScene method |
KinematicBody2D | CharacterBody2D | Node type renamed |
Sprite | Sprite2D | 2D suffix added |
export var | @export var | Annotation syntax |
onready var | @onready var | Annotation syntax |
set_cell(x, y, id) | set_cell(layer, coords, source, atlas, alt) | TileMap completely reworked |
await on signal that fires instantly → returns immediately (not next frame)await tween.finished when duration=0 → hangs foreverawait → silently becomes dangling task, no errorawait → crash (coroutine references freed objects)await does NOT pause the caller unless the caller also uses await:
death_sequence() # Returns immediately — does NOT wait
await death_sequence() # This DOES wait
_ready() is bottom-up (children first, then parent) — NOT top-down@onready vars resolved BEFORE _ready() body runsinstantiate() without add_child() → node exists but NOT in tree (no _ready, no _process)_init() runs before tree entry — no access to $Children or get_parent()queue_free() doesn't happen immediately — node is still accessible until end of frameis_action_just_pressed() in _physics_process() can miss inputs at low framerates_unhandled_input() for game input, _input() only for UIInput.get_vector() returns normalized vector — no need to .normalized() againmove_and_slide() modifies velocity (wall sliding) — read velocity AFTER call, not beforecall_deferred() required for collision shape changes during physics callbacksRayCast2D/3D must be enabled AND force_raycast_update() called for immediate resultsIf unsure about exact API signatures for Godot 4.4+, use Context7:
mcp__claude_ai_Context7__resolve-library-id → find "godot"mcp__claude_ai_Context7__query-docs → get current API detailsgdformat + gdlint on all .gd filespush_error() for unrecoverable, push_warning() for suspicious but safeassert() for debug-only invariants (stripped in release)