10 KiB
10 KiB
Language: English | 日本語 | Português (BR) | Español | Русский | 简体中文 | हिन्दी
Godot MCP Pro — AI 助手技能指南
将此文件复制到 Godot 项目根目录的
.claude/skills.md,以便 Claude Code 获得如何高效使用 Godot MCP Pro 的完整上下文。
什么是 Godot MCP Pro?
你可以使用 169 个 MCP 工具直接连接 Godot 4 编辑器。你可以创建场景、编写脚本、模拟玩家输入、检查运行中的游戏等等——所有操作都无需用户离开当前对话。每次更改都通过 Godot 的 UndoRedo 系统进行,因此用户随时可以 Ctrl+Z 撤销。
核心工作流
1. 探索项目
在进行更改之前,先了解项目全貌:
get_project_info → 项目名称、Godot 版本、渲染器、视口大小
get_filesystem_tree → 目录结构(可使用 filter: "*.tscn" 或 "*.gd")
get_scene_tree → 当前打开场景的节点层级
read_script → 读取任意 GDScript 文件
get_project_settings → 检查项目配置
2. 构建 2D 场景
create_scene → 创建 .tscn 文件并指定根节点类型
add_node → 添加带属性的子节点
create_script → 编写游戏逻辑的 GDScript
attach_script → 将脚本附加到节点
update_property → 设置 position、scale、modulate 等
save_scene → 保存到磁盘
示例——创建玩家:
create_scene设置 root_type 为CharacterBody2D,path 为res://scenes/player.tscnadd_node类型Sprite2D并设置 texture 属性add_node类型CollisionShape2Dadd_resource为 CollisionShape2D 分配形状(如RectangleShape2D)create_script编写移动逻辑attach_script附加到根节点save_scene
3. 构建 3D 场景
create_scene → root_type: Node3D
add_mesh_instance → 添加基础体(box、sphere、cylinder、plane)或导入 .glb/.gltf
setup_lighting → 添加 DirectionalLight3D、OmniLight3D 或 SpotLight3D
setup_environment → 天空、环境光、雾、色调映射
setup_camera_3d → 摄像机(可选 SpringArm3D 实现第三人称视角)
set_material_3d → PBR 材质(albedo、metallic、roughness、emission)
setup_collision → 为物理体添加碰撞形状
setup_physics_body → 配置质量、摩擦力、重力
4. 编写和编辑脚本
create_script → 创建新的 .gd 文件(提供完整内容)
edit_script → 修改现有脚本
- 使用 `replacements: [{search: "old code", replace: "new code"}]` 进行定向编辑
- 使用 `content` 完整替换文件
- 使用 `insert_at_line` + `text` 插入代码
validate_script → 不运行即可检查语法错误
read_script → 编辑前读取当前内容
5. 测试与调试
play_scene → 启动游戏(mode: "current"、"main" 或文件路径)
get_game_screenshot → 查看游戏当前画面
capture_frames → 捕获多帧以观察运动/动画
get_game_scene_tree → 检查运行时的场景树
get_game_node_properties → 读取运行时数值(position、health、state 等)
set_game_node_property → 修改运行中游戏的数值
simulate_key → 按键(WASD、SPACE 等)并指定持续时间
simulate_mouse_click → 在视口坐标处点击
simulate_action → 触发 InputMap 动作(move_left、jump 等)
get_editor_errors → 检查运行时错误
stop_scene → 停止游戏
测试循环:
play_scene→ 启动游戏get_game_screenshot→ 查看当前状态simulate_key/simulate_action→ 与游戏交互capture_frames→ 观察一段时间内的行为get_game_node_properties→ 检查特定数值stop_scene→ 完成后停止- 修复脚本问题 → 重复
6. 动画
# 确保场景中存在 AnimationPlayer 节点
create_animation → 创建带时长和循环模式的新动画
add_animation_track → 添加 property/transform/method 轨道
set_animation_keyframe → 在特定时间插入关键帧
get_animation_info → 查看现有动画信息
示例——弹跳精灵:
create_animationname 为bounce,length 为1.0,loop_mode 为1(线性循环)add_animation_tracktrack_path 为Sprite2D:position,track_type 为valueset_animation_keyframetime 为0.0,value 为Vector2(0, 0)set_animation_keyframetime 为0.5,value 为Vector2(0, -50)set_animation_keyframetime 为1.0,value 为Vector2(0, 0)
7. UI / HUD
add_node → Control、Label、Button、TextureRect 等
set_anchor_preset → 定位 Control(full_rect、center、bottom_wide 等)
set_theme_color → 修改 font_color 等
set_theme_font_size → 调整文字大小
set_theme_stylebox → 背景、边框、圆角
connect_signal → 连接 button 的 pressed、value_changed 等信号
8. TileMap
tilemap_get_info → 检查图块集来源和图集布局
tilemap_set_cell → 放置单个图块
tilemap_fill_rect → 填充矩形区域
tilemap_get_used_cells → 查看已放置的内容
tilemap_clear → 清除所有单元格
9. 音频
add_audio_bus → 创建音频总线(SFX、Music、UI)
set_audio_bus → 调整音量、独奏、静音
add_audio_bus_effect → 添加混响、延迟、压缩器等
add_audio_player → 添加 AudioStreamPlayer(2D/3D) 节点
10. 项目配置
set_project_setting → 修改视口大小、物理设置等
set_input_action → 定义输入映射(move_left → KEY_A 等)
add_autoload → 注册 autoload 单例
set_physics_layers → 命名碰撞层(player、enemy、world 等)
重要规则与注意事项
属性值
属性会从字符串自动解析。使用以下格式:
- Vector2:
"Vector2(100, 200)" - Vector3:
"Vector3(1, 2, 3)" - Color:
"Color(1, 0, 0, 1)"或"#ff0000" - Bool:
"true"/"false" - 数字:
"42"、"3.14" - 枚举: 使用整数值(例如第一个枚举值用
0)
不要直接编辑 project.godot
Godot 编辑器会不断覆盖 project.godot。修改项目设置请务必使用 set_project_setting。
GDScript 类型注解
在对无类型数组使用 for 循环时,请使用显式类型注解:
# 错误——会导致报错
for item in some_untyped_array:
var x := item.value # 类型推断失败
# 正确
for i in range(some_untyped_array.size()):
var item: Dictionary = some_untyped_array[i]
var x: int = item.value
脚本更改需要重新加载
创建或大幅修改脚本后,使用 reload_project 确保 Godot 识别更改。在 create_script 之后尤其重要。
simulate_key 技巧
- 精确移动使用短持续时间(0.3-0.5 秒)
- 长持续时间(1 秒以上)会导致过冲
- 游戏测试时,如果已定义 InputMap 动作,优先使用
simulate_action而非simulate_key
simulate_mouse_click
- 默认
auto_release: true会同时发送按下和释放事件——UI 按钮必须如此 - UI 按钮在释放时触发,因此两个事件都必不可少
execute_game_script 限制
- 不支持嵌套函数(
func中的func)——会导致编译错误 - 动态访问请使用
.get("property")而非.property - 运行时错误会暂停调试器(会自动继续,但尽量避免)
碰撞与拾取区域
- 可收集物品请使用 Area3D/Area2D 并设置半径 >= 1.5
- 较小的半径几乎无法通过模拟输入触发
经常保存
进行重大更改后请调用 save_scene。未保存的更改可能在编辑器重新加载时丢失。
分析与调试工具
出现问题时,使用以下工具进行排查:
get_editor_errors → 检查脚本错误和运行时异常
get_output_log → 读取 print() 输出和警告
analyze_scene_complexity → 查找性能瓶颈
analyze_signal_flow → 可视化信号连接
detect_circular_dependencies → 查找脚本/场景的循环引用
find_unused_resources → 清理未使用的文件
get_performance_monitors → FPS、内存、绘制调用、物理统计
测试与 QA
run_test_scenario → 定义并运行自动化测试序列
assert_node_state → 验证节点属性是否匹配预期值
assert_screen_text → 验证文本是否显示在屏幕上
compare_screenshots → 视觉回归测试(使用文件路径,不要用 base64)
run_stress_test → 生成大量节点以测试性能
高级模式
跨场景操作
cross_scene_set_property → 修改当前未打开场景中的节点
find_node_references → 查找引用某个模式的所有文件
batch_set_property → 为某类型的所有节点设置属性
着色器工作流
create_shader → 编写类 GLSL 的着色器代码
assign_shader_material → 应用到节点
set_shader_param → 在运行时调整 uniform 参数
get_shader_params → 查看当前值
导航(3D)
setup_navigation_region → 定义可行走区域
bake_navigation_mesh → 生成导航网格
setup_navigation_agent → 为角色添加寻路功能
AnimationTree 与状态机
create_animation_tree → 使用状态机或混合树设置 AnimationTree
add_state_machine_state → 添加状态(idle、walk、run、jump)
add_state_machine_transition → 定义状态之间的过渡
set_tree_parameter → 控制混合参数
推荐工作流顺序
从零开始构建新游戏时:
- 项目设置 —
get_project_info、set_project_setting(视口、物理) - 输入映射 —
set_input_action定义所有玩家控制 - 主场景 —
create_scene,设为主场景 - 玩家 — 创建包含精灵、碰撞、脚本的玩家场景
- 关卡/世界 — 构建环境(TileMap、3D 网格等)
- 游戏逻辑 — 敌人、道具、UI 的脚本
- 音频 — 设置总线、添加音频播放器
- 测试 —
play_scene,使用模拟输入测试,修复 bug - 打磨 — 动画、粒子、着色器、主题
- 导出 —
list_export_presets、export_project