scenario-godot-expert
Compare original and translation side by side
🇺🇸
Original
English🇨🇳
Translation
ChineseGodot expert (technical director and agent protocol)
Godot 专家(技术总监与 Agent 协议)
Target: Godot 4.7.2.stable (standard build, no C#), macOS Apple Silicon, Metal by default.
Expert Godot work is a loop run against evidence: set the budget, build one stage, measure it, look at it, fix it, advance. An agent without a mouse gets there by picking the right channel, passing only on a machine-readable result, and never trusting one signal alone. This skill is that protocol, the shared toolkit every scenario-godot-* skill calls (), and the map of the team. If a sibling skill named here is missing from your available skills, ask the user to install it (); unattended, proceed from tool schemas and flag the gap.
scripts/npx skills add scenario-labs/skills --skill <name>Status (2026-10-02): every toolkit function below ran in Godot 4.7.2 here (23 live tests, 17 offline, all pass; ).
references/procedures.md目标:Godot 4.7.2.stable(standard build,无 C#),macOS Apple Silicon,默认使用 Metal。
Godot 专家工作是一套以证据为依据的循环:设定预算,构建一个阶段,测量,查看,修复,然后推进。没有鼠标的 Agent 要实现这一目标,必须选对 channel,只传递机器可读结果,并且绝不依赖单一信号。这个 skill 就是该协议、所有 scenario-godot-* skill 共同调用的共享工具包(),也是团队导航图。如果此处提到的某个 sibling skill 不在可用 skills 中,请让用户安装();在无人值守的情况下,则依据 tool schema 继续,并标记该缺口。
scripts/npx skills add scenario-labs/skills --skill <name>状态(2026-10-02): 下列每项 toolkit function 均已在 Godot 4.7.2 中运行(23 个 live test、17 个 offline test,全部通过;)。
references/procedures.mdStance (the expert delta)
专家原则(专家的差异化能力)
- Headless output is the truth; the editor's Output panel is not. MCP servers that scrape it "report errors for lines no longer on disk", and it does not list every project error (Fennara, 2vSYP7GyA5U [00:02:51, 00:06:20]). PixelLab's agent runs the Godot binary itself and reads the console (THwZYWuOdZI [00:13:45]). Pass on the envelope plus a log scan, never on "it exited": a script with a parse error exits 0, with or without
AGENT_RESULT, and so does a script path Godot cannot find (version deltas, verified; L6).--check-only - One writer per project. A GUI editor holding a project keeps its own copy of the open scenes, so its next save can overwrite a headless edit [added]; merged files can fail to parse (Lilith Duncan, CAJ_iIedx_I [00:01:36]). The toolkit refuses a project a GUI Godot has open; work through that editor (MCP) or ask the user to close it. Never close a Godot or Blender process you did not start [added].
.tscn - Milliseconds against a budget, on the target. Measure before optimizing (Dan Does Dev, s2C2RO_WMh0 [00:07:12]); profile on the real device class, thermals included (Ian Bolton, WrjaUNAXYqk [00:09:35]). Headless frame time is loop time, not game cost; windowed frame time on this Mac is pinned to the display refresh; judge and
gpu_ms(observed).cpu_ms - Look AND check. Every frame goes through and a contact sheet you open. Headless draws nothing, so captures need a windowed run (observed). After AI asset import, check facing, animation direction, tile seams and camera jitter by eye (PixelLab, THwZYWuOdZI).
gd_review.image_checks - Tests are the contract. Assert on signals and public results, not internals (Godotneers, CreugthdgJ0 [01:08:36]; Butch Wesley, ImqhHLlPfZg [00:16:59]; Mike Schulze, x6GdTgIAFiU [00:24:19]); bound every await (2 s Godotneers, 5 s Schulze); prove the test bites by emptying the function and watching it go red (Wesley [00:13:40]).
- Design for a mouseless driver. Split body and brain so a test brain can steer a character (Godotneers [00:18:14]). Headless has no mouse device (Wesley [00:48:33]), yet GUI input still tests headless: reaches Controls, while
get_viewport().push_input(event, true)never reaches a MOUSE_FILTER_STOP Control (scenario-godot-gameplay, scenario-godot-ui, observed); passInput.parse_input_eventso positions are logical, not window pixels. Levels hold a spawn point, not the player (Godotneers [00:56:56]).true - Edits persist only with and a save.
owneralone is invisible in the Scene dock and lost on save (Godot docs, Running code in the editor); script edits bypass Undo unless routed throughadd_child(Queble, nW7YtSSJzbQ [00:04:41]).EditorUndoRedoManager - Be honest about visual editors. VisualShader, AnimationTree, the TileSet and theme editors, and the particle inspector are visual; the agent writes ,
.gdshader/.trestext, or builds the resource in code, and names the GUI path for a human. Pick an MCP by feedback fidelity, not tool count (Fennara [00:09:22])..tscn
- Headless 输出才是真相;编辑器的 Output panel 不是。 抓取 Output panel 的 MCP server 会“报告磁盘上已不存在的行所产生的错误”,而且它不会列出所有项目错误(Fennara,2vSYP7GyA5U [00:02:51, 00:06:20])。PixelLab 的 agent 直接运行 Godot binary 并读取 console(THwZYWuOdZI [00:13:45])。必须传递 envelope 加一次 log scan,绝不能只依据“它已退出”:存在 parse error 的 script 无论是否带
AGENT_RESULT都会 exit 0,Godot 找不到的 script path 也一样(版本差异,已验证;L6)。--check-only - 每个项目只能有一个写入者。 GUI editor 持有项目时,会保留已打开场景的独立副本,因此它下一次保存时可能覆盖 headless edit [added];合并后的 file 可能无法解析(Lilith Duncan,CAJ_iIedx_I [00:01:36])。toolkit 会拒绝处理被 GUI Godot 打开的项目;请通过该 editor(MCP)操作,或让用户将其关闭。绝不关闭并非由你启动的 Godot 或 Blender 进程 [added]。
.tscn - 在目标设备上按预算衡量毫秒数。 优化前先测量(Dan Does Dev,s2C2RO_WMh0 [00:07:12]);在真实设备等级上做 profile,并把 thermals 纳入考虑(Ian Bolton,WrjaUNAXYqk [00:09:35])。Headless frame time 是 loop time,而非 game cost;这台 Mac 上的 windowed frame time 被 display refresh 固定;应判断 和
gpu_ms(实测)。cpu_ms - 既看画面,也做检查。 每一帧都要经过 以及一份由你打开的 contact sheet。Headless 不会绘制任何内容,因此 capture 必须通过 windowed run(实测)。导入 AI asset 后,要用肉眼检查朝向、animation direction、tile seam 和 camera jitter(PixelLab,THwZYWuOdZI)。
gd_review.image_checks - 测试就是契约。 对 signals 和 public results 做断言,而不是 internals(Godotneers,CreugthdgJ0 [01:08:36];Butch Wesley,ImqhHLlPfZg [00:16:59];Mike Schulze,x6GdTgIAFiU [00:24:19]);为每个 await 设置上限(Godotneers 2 s,Schulze 5 s);通过清空 function 并观察测试变红来证明测试确实能发现问题(Wesley [00:13:40])。
- 为无鼠标 driver 而设计。 将 body 和 brain 分离,使 test brain 能操控 character(Godotneers [00:18:14])。Headless 没有 mouse device(Wesley [00:48:33]),但 GUI input 仍可在 headless 下测试:能到达 Controls,而
get_viewport().push_input(event, true)无法到达带 MOUSE_FILTER_STOP 的 Control(scenario-godot-gameplay、scenario-godot-ui,实测);传入Input.parse_input_event,使 position 采用逻辑坐标,而不是 window pixel。Level 中保存的是 spawn point,而不是 player(Godotneers [00:56:56])。true - 只有设置 并保存,编辑才会持久化。 仅调用
owner的对象在 Scene dock 中不可见,并会在保存时丢失(Godot docs,Running code in the editor);script edit 会绕过 Undo,除非通过add_child路由(Queble,nW7YtSSJzbQ [00:04:41])。EditorUndoRedoManager - 对 visual editor 保持诚实。 VisualShader、AnimationTree、TileSet 和 theme editor,以及 particle inspector 都是 visual;Agent 会写入 、
.gdshader/.tres文本,或用代码构建 resource,并为人指出对应的 GUI path。选择 MCP 时依据 feedback fidelity,而不是 tool 数量(Fennara [00:09:22])。.tscn
Execution channels
执行 channel
| Channel | Use for | Cost (measured here) | Rules |
|---|---|---|---|
Headless job | logic, data, audits, scene building, imports, tests, exports | 0.2 s for a small job; | default channel; watchdog ends a hung job (exit 124) |
Windowed job | anything that must render: screenshots, sequences, GPU time | about 1 s for 4 views warm; first capture in a fresh project 10.8 s, a 5 s profile 29.6 s | 160x90 window, SubViewport at the requested size, focus handed back (2 restores per run observed); |
Headless editor | EditorInterface: open, edit and save scenes; EditorFileSystem | 1.1 s | wait 2 frames before editor calls; without |
GUI editor + MCP (hybridindie | the user's open editor: live tree, selection, undoable edits | stdio probe 0.9 s, 23 tools exposed by default | only when the user has the editor open; project-local |
| Running game + MCP (tugcantopaloglu) | drive a running game (input, eval) | not run here | clone, |
gd_live.channels(P)| Channel | 用途 | 成本(此处实测) | 规则 |
|---|---|---|---|
Headless 作业 | 逻辑、数据、审计、场景构建、导入、测试、导出 | 小型作业 0.2 s; | 默认 channel;watchdog 会终止卡住的作业(exit 124) |
Windowed 作业 | 任何必须渲染的内容:screenshot、sequence、GPU time | 预热后 4 个 view 约 1 s;新项目首次 capture 10.8 s,5 s profile 29.6 s | 160x90 window、请求尺寸的 SubViewport、运行后归还焦点(观察到每次运行恢复 2 次); |
Headless 编辑器 | EditorInterface:打开、编辑和保存场景;EditorFileSystem | 1.1 s | editor call 前等待 2 帧;不带 |
GUI 编辑器 + MCP(hybridindie | 用户已打开的 editor:实时 scene tree、selection、可撤销编辑 | stdio probe 0.9 s,默认暴露 23 个 tool | 仅在用户已打开 editor 时使用;只使用 project-local |
| 运行中的游戏 + MCP(tugcantopaloglu) | 驱动正在运行的游戏(input、eval) | 此处未运行 | clone,执行 |
gd_live.channels(P)Establish first
首先确定
Ask once, then run: target platforms and lowest device; frame budget (default 60 fps desktop, 30 fps mobile); 2D or 3D; renderer (Forward+ desktop 3D, Mobile for demanding phones, Compatibility for web and widest reach, after Ray Hayes, KWhVVMpihsc [00:06:03]); art style and pixel art or not; whether the user's editor has the project open; the deliverable. Then and , and write the renderer, physics engine (Jolt for 3D), stretch mode, main scene and autoloads into the plan.
gd_live.channels(P)gd_run.audit(P, "project")询问一次,然后运行:目标平台及最低规格设备;frame budget(桌面默认 60 fps,移动端 30 fps);2D 或 3D;renderer(桌面 3D 用 Forward+,高负载手机用 Mobile,Web 和最广泛兼容用 Compatibility,参考 Ray Hayes,KWhVVMpihsc [00:06:03]);art style 以及是否为 pixel art;用户的 editor 是否已打开项目;最终 deliverable。然后调用 和 ,并把 renderer、physics engine(3D 用 Jolt)、stretch mode、main scene 和 autoloads 写入 plan。
gd_live.channels(P)gd_run.audit(P, "project")Workflow (the expert loop)
工作流(专家循环)
- Brief in numbers. Budgets per platform, resolution, scale, style. GATE: every later check has a number to compare with.
- Project. (APFS clone, 0.01 s, its own
gd_env.base_project("3d"|"2d", dest)folder) oruser://, which writes the project-manager defaults a hand-writtennew_project(...)lacks. GATE:project.godothas no flags.audit(P, "project") - Baseline. ,
check_all(P), captures from fixed views, a profile if performance matters. GATE: zero parse and script errors; flags fixed or listed; sheet opened.audit(P, "scene", scene=...) - Build one stage with small idempotent jobs (get-or-create, set, explicit save). Route domain work to its owner (below).
owner - Measure. Audit, tests (),
run_testsplusprofile_scene, or the export result. GATE: numbers against the brief.gd_stat.budget_check - Look AND check. Same views, , contact sheet opened, judged with the domain skill's critique. GATE: no flag that sets
image_checksfalse, the change visible (okchanged_fraction above 0).compare - Fix before advancing, one change at a time; proves parity or gain.
compare - Deliver with evidence. Each step with its toolkit call, then Verified (what ran, result file, number or frame) and Assumed (not run, defaults). Never call a scene, shader, level or build done without numbers and a frame you looked at.
- 用数字定义 brief。 各 platform 的 budget、resolution、scale、style。GATE:之后的每次 check 都必须有一个可供比较的数字。
- 建立项目。 (APFS clone,0.01 s,拥有自己的
gd_env.base_project("3d"|"2d", dest)folder),或使用user://;后者会写入手写new_project(...)所缺少的 project-manager defaults。GATE:project.godot没有任何 flag。audit(P, "project") - 建立 baseline。 、
check_all(P)、固定 view 的 capture,以及性能相关时的 profile。GATE:parse 和 script error 均为零;flag 已修复或已列出;contact sheet 已打开。audit(P, "scene", scene=...) - 构建一个阶段。 使用小型、幂等的作业(get-or-create、设置 、显式保存)。将领域工作路由给其 owner(见下文)。
owner - 测量。 Audit、tests()、
run_tests加profile_scene,或 export result。GATE:将数字与 brief 对照。gd_stat.budget_check - 既看画面,也做检查。 使用相同 view、、打开 contact sheet,并结合领域 skill 的 critique 进行判断。GATE:不存在令
image_checks为 false 的 flag,且变化可见(ok的 changed_fraction 大于 0)。compare - 推进前先修复。 每次只做一项修改;用 证明结果一致或有改进。
compare - 带着证据交付。 每一步都附上 toolkit call,然后列出 Verified(运行了什么、result file、数字或 frame)和 Assumed(未运行的内容、所用默认值)。没有数字,也没有亲自查看过的 frame,绝不把 scene、shader、level 或 build 称为完成。
Shared toolkit (scripts/
, the contract for every scenario-godot-* skill)
scripts/共享 toolkit(scripts/
,每个 scenario-godot-* skill 的契约)
scripts/import sys; sys.path.insert(0, "<scenario-godot-expert>/scripts")Every , , , and call, with defaults and return values: section 1. Most used: , , , , , .
gd_envgd_rungd_reviewgd_statgd_livereferences/procedures.mdgd_env.new_projectgd_run.run_scriptgd_run.capture_scenegd_run.profile_scenegd_run.exportgd_review.image_checksEvery run returns , , (the job's dictionary), , , , , , , , , , . Output lands in (carries ). Concurrency: (6) Godot processes, (2), one per project, all through ; when a GUI editor holds the project.
gd_runokerrorresultexit_codetimed_outparse_errorsscript_errorsshader_errorsengine_errorswarningsleakslog_pathresult_path<project>/.agent_out/.gdignoreGD_MAXGD_MAX_WINDOWEDgd_run.godot_slotGodotBusyA domain job is a GDScript file in the project (AgentKit, , is copied to ):
scripts/agentkit/res://addons/agentkit/gdscript
extends "res://addons/agentkit/agent_job.gd"
func run() -> Dictionary:
var scene := await load_scene("res://main.tscn", 2) # in the tree, 2 frames waited
note("children", scene.get_child_count())
return {"ok": true, "speed": arg("speed", 4.0)} # arg() typed by its defaultOr a method on any RefCounted script, (it receives the job). Errors logged during the job flip to false unless is set. A script error aborts a typed , which then returns : an empty result always fails (), even with , so return at least . reports for every file it wrote ( for the named one) and treats an iOS Xcode project as the . Captures emulate the project stretch (keep, keep_width, keep_height, expand, ignore, integer scale, scale factor, viewport mode) with black bars, matching the engine on 15 cases (L20); in your own job read a SubViewport with . Helpers: , , , , , , , , ; libraries (, presets), (). Domain code goes in and .
run_script(P, "res://tools/x.gd:build", args)okexpect_errorsrun() -> Dictionary{}aborted: trueexpect_errors{"ok": true}exportbytesmain_bytesexport_project_onlyartifactmake_viewportagent_capture.grab(vp)argout_pathload_scenewait_frameswait_physics_frameswait_secondsnoteis_headlesscaptured_errorsagent_build.gdsave_sceneagent_profile.gdrecordscripts/gd_<domain>.pyscripts/agentkit/<domain>/import sys; sys.path.insert(0, "<scenario-godot-expert>/scripts")每个 、、、 和 call、默认值和返回值: section 1。最常用:、、、、、。
gd_envgd_rungd_reviewgd_statgd_livereferences/procedures.mdgd_env.new_projectgd_run.run_scriptgd_run.capture_scenegd_run.profile_scenegd_run.exportgd_review.image_checks每次 run 都会返回 、、(作业的 dictionary)、、、、、、、、、 和 。Output 位于 (其中包含 )。并发设置:(6)个 Godot process、(2)个,每个项目一个,所有 process 都通过 启动;GUI editor 持有项目时返回 。
gd_runokerrorresultexit_codetimed_outparse_errorsscript_errorsshader_errorsengine_errorswarningsleakslog_pathresult_path<project>/.agent_out/.gdignoreGD_MAXGD_MAX_WINDOWEDgd_run.godot_slotGodotBusy领域作业是项目中的 GDScript file(AgentKit, 会被复制到 ):
scripts/agentkit/res://addons/agentkit/gdscript
extends "res://addons/agentkit/agent_job.gd"
func run() -> Dictionary:
var scene := await load_scene("res://main.tscn", 2) # in the tree, 2 frames waited
note("children", scene.get_child_count())
return {"ok": true, "speed": arg("speed", 4.0)} # arg() typed by its default也可以使用任意 RefCounted script 上的 method,即 (它会收到该作业)。作业期间记录的错误会把 翻转为 false,除非设置 。script error 会中止 typed ,随后它返回 :empty result 永远判定为失败(),即使设置了 ;因此至少返回 。 会报告它写入的每个 file 的 (命名 file 使用 ),并把 iOS Xcode project 视为 artifact。Capture 会模拟 project stretch(keep、keep_width、keep_height、expand、ignore、integer scale、scale factor、viewport mode)并添加 black bar,在 15 个 case 中与 engine 表现一致(L20);在自己的 job 中,应读取带 的 SubViewport 并使用 。Helper:、、、、、、、、;library:(、presets)、()。领域代码应放在 和 中。
run_script(P, "res://tools/x.gd:build", args)okexpect_errorsrun() -> Dictionary{}aborted: trueexpect_errors{"ok": true}exportbytesmain_bytesexport_project_onlymake_viewportagent_capture.grab(vp)argout_pathload_scenewait_frameswait_physics_frameswait_secondsnoteis_headlesscaptured_errorsagent_build.gdsave_sceneagent_profile.gdrecordscripts/gd_<domain>.pyscripts/agentkit/<domain>/Numbers
数值
| Value | Relative to | Source |
|---|---|---|
| 16.67 / 33.33 ms | frame budget at 60 / 30 fps | arithmetic |
| 8.33 ms | windowed | observed |
| 6.9 ms | headless frame pacing: the low-processor sleep ( | observed; scenario-godot-gameplay, scenario-godot-ui |
| 1.4 to 1.8 ms / 0 | GPU p95 of the fx test scene at 1080p on Vulkan (four runs) / on Metal | observed |
| 0.2 s, 10.2 s | small job; a hung job stopped by the watchdog (timeout 20 s) | observed |
| 60.8 / 75.0 / 41.4 MB | macOS universal zip / Linux x86_64 (binary plus .pck) / Web (9 files) export of Base3D | observed, L9 |
| 430 MB | iOS Xcode project ( | observed, L9 |
| 数值 | 含义或比较基准 | 来源 |
|---|---|---|
| 16.67 / 33.33 ms | 60 / 30 fps 下的 frame budget | 算术计算 |
| 8.33 ms | 此 120 Hz display 上 windowed | 实测 |
| 6.9 ms | Headless frame pacing:低 processor 休眠( | 实测;scenario-godot-gameplay、scenario-godot-ui |
| 1.4 至 1.8 ms / 0 | 1080p 下 fx test scene 在 Vulkan 上的 GPU p95(四次运行)/ 在 Metal 上的 GPU p95 | 实测 |
| 0.2 s / 10.2 s | 小型作业;watchdog 终止的卡住作业(timeout 20 s) | 实测 |
| 60.8 / 75.0 / 41.4 MB | Base3D 的 macOS universal zip / Linux x86_64(binary 加 .pck)/ Web(9 个文件)导出 | 实测,L9 |
| 430 MB | iOS Xcode project( | 实测,L9 |
Quality gates
质量门禁
- Measurable: true with zero parse, script and shader errors;
okcheck_all; JUnitfailed_files == []andfailures == 0; audit flags fixed or justified;tests > 0ok (p95 under target, hitch ratio at most 1%); export exit 0, artifact size recorded,budget_checklists the expected files.verify_pack - Visual: every capture passes (
image_checksfalse on all_black, all_white, uniform, transparent) and was opened in a contact sheet; before and after from the same views.ok
- 可衡量: 为 true,且 parse、script 和 shader error 均为零;
ok的check_all;JUnit 的failed_files == []且failures == 0;audit flag 已修复或有充分说明;tests > 0通过(p95 低于目标,hitch ratio 不超过 1%);export exit 0,记录 artifact size,并由budget_check列出预期文件。verify_pack - 视觉: 每次 capture 都通过 (all_black、all_white、uniform、transparent 时
image_checks为 false),并在 contact sheet 中打开查看;修改前后使用相同 view。ok
Common mistakes
常见错误
| Mistake | What it looks like | Fix |
|---|---|---|
| trusting exit codes | parse error, exit 0 | |
| "Identifier not found: GameState" | |
hand-written | GodotPhysics3D, stretch disabled, UI does not scale | |
| "Identifier not found" | |
autoload named like its | 'Class "GameState" hides an autoload singleton.' (GDScript analyzer) | name the autoload differently ( |
capture or | 0 frames drawn; | windowed |
| GPU timing on Metal | | |
| export output inside the project | build imported and packed next time | outside, or |
| macOS export | "ETC2 ASTC" or "Invalid bundle identifier" | |
clones sharing | saves, input maps and the shader cache of other agents' clones show up (every clone was named Base3D) | |
per-frame | the same value on every CSV row (the monitor refreshes about once per second; 0 under | |
| 错误 | 表现 | 修复方式 |
|---|---|---|
| 信任 exit code | 存在 parse error,但 exit 0 | 使用 |
对使用 autoload 的代码执行 | “Identifier not found: GameState” | 使用 |
手写 | GodotPhysics3D、stretch 被禁用、UI 无法缩放 | 使用 |
在全新项目中使用 | “Identifier not found” | 先执行 |
autoload 与其 | “Class "GameState" hides an autoload singleton.”(GDScript analyzer) | 使用不同名称( |
在 headless 下 capture 或使用 | 绘制 0 帧; | 使用 windowed |
| 在 Metal 上进行 GPU timing | | 使用 |
| export output 位于项目内部 | 下次构建时会被 import 并打包 | 输出到项目外部,或使用 |
| macOS export | “ETC2 ASTC”或“Invalid bundle identifier” | 设置 |
多个 clone 共享 | 其他 agent clone 的 save、input map 和 shader cache 相互干扰(所有 clone 都名为 Base3D) | |
每帧使用 | CSV 每一行的值都相同(monitor 约每秒刷新一次;使用 | 使用 |
Team routing and handoffs
团队路由与交接
| Skill | Route here when the brief mentions |
|---|---|
| scenario-godot-architecture | project structure, scenes vs nodes, signals, Resources, autoloads, composition, typing, save data |
| scenario-godot-2d | sprites, TileMapLayer, TileSet, platformer or top-down feel, Camera2D, pixel-perfect, 2D lights, parallax |
| scenario-godot-3d-world | CharacterBody3D, blockout, CSG, GridMap, terrain, GLB import, Jolt, procedural meshes |
| scenario-godot-rendering-lighting | renderer choice, SDFGI, VoxelGI, LightmapGI, environment, fog, shadows, post, Compositor |
| scenario-godot-shaders | |
| scenario-godot-vfx | GPUParticles, trails, sub-emitters, particle collision, impacts, juice |
| scenario-godot-animation | AnimationPlayer, AnimationTree, tweens, skeletons, IK, retargeting, root motion, cutscenes |
| scenario-godot-ui | Control layout, containers, themes, menus, HUD, focus and gamepad, localization, scaling on phones |
| scenario-godot-gameplay | state machines, inventory, dialogue, save and load, navigation, AI, procedural generation, input |
| scenario-godot-audio | buses, effects, spatial audio, adaptive music, SFX variation |
| scenario-godot-multiplayer | high-level multiplayer, RPCs, authority, spawner and synchronizer, lobbies, dedicated servers |
| scenario-godot-pipeline-automation | CLI and CI, editor plugins, GUT and gdUnit4, import plugins, GDExtension, MCP workflows |
| scenario-godot-performance-export | profiler, monitors, stutter, mobile, web, desktop and Steam export, signing |
A cross-cutting item has one owner: shader stutter and web threading go to scenario-godot-performance-export, naming the second skill in the brief. Every handoff packet carries: project path and channel, the brief in numbers, what was done with its toolkit calls, evidence (result JSON path, contact sheet and flags, CSV with , JUnit totals, export sizes), Verified, Assumed, open issues, and a fence (what the receiver may touch). The receiver reproduces one piece of evidence before building on it. Sister teams: blender-expert (asset fixes before GLB export), unreal-expert, unity-expert, maya-expert, zbrush-expert.
budget_check| Skill | 当 brief 提到以下内容时路由到此 skill |
|---|---|
| scenario-godot-architecture | 项目结构、scene 与 node、signal、Resource、autoload、composition、typing、save data |
| scenario-godot-2d | sprite、TileMapLayer、TileSet、platformer 或 top-down 手感、Camera2D、pixel-perfect、2D light、parallax |
| scenario-godot-3d-world | CharacterBody3D、blockout、CSG、GridMap、terrain、GLB import、Jolt、procedural mesh |
| scenario-godot-rendering-lighting | renderer 选择、SDFGI、VoxelGI、LightmapGI、environment、fog、shadow、post、Compositor |
| scenario-godot-shaders | |
| scenario-godot-vfx | GPUParticles、trail、sub-emitter、particle collision、impact、juice |
| scenario-godot-animation | AnimationPlayer、AnimationTree、tween、skeleton、IK、retargeting、root motion、cutscene |
| scenario-godot-ui | Control layout、container、theme、menu、HUD、focus 与 gamepad、localization、手机缩放 |
| scenario-godot-gameplay | state machine、inventory、dialogue、save 与 load、navigation、AI、procedural generation、input |
| scenario-godot-audio | bus、effect、spatial audio、adaptive music、SFX variation |
| scenario-godot-multiplayer | 高层 multiplayer、RPC、authority、spawner 与 synchronizer、lobby、dedicated server |
| scenario-godot-pipeline-automation | CLI 与 CI、editor plugin、GUT 与 gdUnit4、import plugin、GDExtension、MCP workflow |
| scenario-godot-performance-export | profiler、monitor、stutter、mobile、web、desktop 与 Steam export、signing |
跨领域事项只能有一个 owner:shader stutter 和 web threading 归 scenario-godot-performance-export,并在 brief 中注明第二个 skill。每次 handoff packet 都必须包含:project path 与 channel、以数字表达的 brief、通过 toolkit call 完成的工作、证据(result JSON path、contact sheet 与 flag、带 的 CSV、JUnit 总数、export size)、Verified、Assumed、open issue,以及 fence(接收方可以修改的范围)。接收方在基于现有结果继续工作前,必须先复现其中一项证据。姐妹团队:blender-expert(GLB export 前修复 asset)、unreal-expert、unity-expert、maya-expert、zbrush-expert。
budget_checkScenario assets into Godot
将场景资产接入 Godot
| Asset | Generated with | Lands in |
|---|---|---|
| sprites, props, icons, tilesets, UI pieces | scenario-game-assets | scenario-godot-2d, scenario-godot-ui |
| animation frames, sprite sheets, VFX loops | scenario-sprite-animation, scenario-sprite-pipeline | scenario-godot-2d (SpriteFrames), scenario-godot-vfx (flipbooks) |
| parallax planes | scenario-parallax-stage | scenario-godot-2d (Parallax2D) |
| GLB meshes | scenario-3d | scenario-godot-3d-world (import), scenario-godot-animation (rigs) |
| PBR textures, tileable materials | scenario-textures | scenario-godot-rendering-lighting, scenario-godot-shaders |
| skyboxes, 360 panoramas | scenario-skyboxes | scenario-godot-rendering-lighting (sky) |
| music, SFX, ambience, voice | scenario-audio, scenario-elevenlabs | scenario-godot-audio |
Check the asset before import (scenario-quality-gate) and again after it, in a capture from the game camera judged by the receiving skill, which also audits GLB scale, pivot and triangle count.
| 资产 | 生成方式 | 接收 skill |
|---|---|---|
| sprite、prop、icon、tileset、UI 组件 | scenario-game-assets | scenario-godot-2d、scenario-godot-ui |
| animation frame、sprite sheet、VFX loop | scenario-sprite-animation、scenario-sprite-pipeline | scenario-godot-2d(SpriteFrames)、scenario-godot-vfx(flipbook) |
| parallax plane | scenario-parallax-stage | scenario-godot-2d(Parallax2D) |
| GLB mesh | scenario-3d | scenario-godot-3d-world(import)、scenario-godot-animation(rig) |
| PBR texture、可平铺 material | scenario-textures | scenario-godot-rendering-lighting、scenario-godot-shaders |
| skybox、360 panorama | scenario-skyboxes | scenario-godot-rendering-lighting(sky) |
| music、SFX、ambience、voice | scenario-audio、scenario-elevenlabs | scenario-godot-audio |
Import 前通过 scenario-quality-gate 检查资产,import 后再从游戏相机 capture 并由接收 skill 进行判断;接收 skill 还应审计 GLB scale、pivot 和 triangle count。
Godot 4.7 traps and macOS notes
Godot 4.7 陷阱与 macOS 注意事项
Read before the first job: Godot 3 names that pass , hangs, unknown flags ignored, waiting on stdin, what headless cannot do (MultiMesh writes, GPUParticles), rewriting , import crashes, deprecated APIs; then the macOS binary, template and paths, window focus, and Metal profiling.
references/traps.md--check-only--script-dProjectSettings.save()project.godotuser://首次作业前阅读 :会通过 的 Godot 3 名称、会卡住的 、被忽略的未知 flag、等待 stdin 的 、headless 无法完成的工作(MultiMesh 写入、GPUParticles)、重写 的 、import 崩溃、已弃用的 API;以及 macOS binary、template 和 path、window focus 与 Metal profiling。
references/traps.md--check-only--script-dproject.godotProjectSettings.save()user://References
参考资料
- : expert claims by source with timestamps, and traps observed while building the toolkit.
references/expert-notes.md - : the toolkit API in full, job-writing rules, and each procedure with its live test and result.
references/procedures.md - : the rubric for judging an agent's Godot output and a handoff.
references/critique.md - : editor menus and settings for the same tasks.
references/gui-paths.md - : every source with credentials, URLs and best timestamps.
references/sources.md
- :按来源列出的专家结论与时间戳,以及构建 toolkit 时观察到的陷阱。
references/expert-notes.md - :完整的 toolkit API、作业编写规则,以及每项 procedure 的 live test 和结果。
references/procedures.md - :用于评判 Agent Godot 输出与完成交接的 rubric。
references/critique.md - :执行同类任务时对应的 editor menu 和 setting。
references/gui-paths.md - :所有来源、凭据、URL 和最佳时间戳。
references/sources.md