让 AI 修 Godot 报错:从最小复现到回归验收的完整流程
遇到节点为空、信号触发两次或重开后状态错误时,怎样给 AI 提供有效证据?用一个按钮计分的小项目练习复现、定位、最小修改和回归验收,附可直接复制的排错模板。
练习目标与适用范围
本练习适合能创建 Godot 场景、但经常在 AI 改完代码后遇到新问题的初学者。以 Godot 4.x 的按钮计分场景为例,目标是做到:每点击一次加一分、重开归零、重复进入场景不重复计分。先保存项目副本或 Git 提交,再在副本里练习。本文提供的是排错方法与验收练习,不声称在所有引擎版本和项目结构中经过实机测试。信号面板位置随版本可能变化,操作术语参考文末的 Godot 4.4 中文文档。
第一步:把问题缩到一个场景
新建一个 Control 根节点,命名 Main;添加 Button 和 Label 子节点,分别命名 AddButton、ScoreLabel。按钮文字设为“加一分”,标签初始显示 0。暂时移走存档、网络请求、自动加载单例和其他 UI。运行当前场景,记录一次点击后数字如何变化。若原项目出错而这个场景不出错,问题可能在场景生命周期或外部连接,而非加法逻辑本身。把最小场景单独保存,后续每一次改动都从它开始验证。
第二步:提供事实,不只粘贴“报错了”
把引擎准确版本、运行方式、节点树、脚本挂载位置、第一条错误及调用栈、复现步骤一起交给 AI。不要贴上千行不相关日志,也不要只发最后一条连锁错误。例如节点为空时,节点名字的大小写、相对路径和脚本所在节点,比“帮我优化一下”更有用。日志中如有账号、令牌或文件路径中的个人信息,先脱敏;不要让 AI 在证据不足时凭空假设场景结构。
请帮我定位问题,先给出最可能的两个原因及验证方法,确认后再修改。
引擎版本:填实际版本
节点树:Main(Control) / AddButton(Button)、ScoreLabel(Label)
脚本挂载:Main
复现:启动场景,点击按钮一次
期望:0 变成 1
实际:填真实结果
第一条错误与调用栈:粘贴脱敏日志
当前相关脚本:粘贴最小代码
约束:只改定位到的逻辑,不重写其他系统;列出修改前后行为。第三步:先排查信号,再改计算逻辑
一次点击加了两分时,先查 pressed 信号是否既在编辑器连接,又在脚本里连接;再查同一信号是否连接到了两个都修改分数的处理函数。给入口临时加一条日志,记录场景实例、处理函数名称和进入次数。一次点击只有一次入口,但数字仍不对,再检查函数内部是否重复更新状态。不要用额外布尔锁掩盖未知重复调用,否则可能把真正需要的第二次点击一起屏蔽。确认原因后只保留一种清晰的连接方式。
第四步:让 AI 给出可审查的最小补丁
要求 AI 只列出需要修改的函数、为什么修改以及预计影响。节点路径错误就修路径,不同时更换整个 UI 框架;重复连接就明确连接来源,不顺手修改分数计算和存档格式。应用前查看差异,尤其留意删除节点、重命名资源、修改项目设置这些跨文件行为。如果 AI 给出的 API 与当前版本不符,带着准确错误去查官方类参考,不要连续接受几个未经验证的新写法。
第五步:执行五个回归用例
用例一:启动后显示 0。用例二:单击后显示 1。用例三:连续十次点击后显示 10,每次只增加 1。用例四:重新加载场景后归零。用例五:退出再进入场景三次,每轮再点击一次,均从 0 变成 1。每项记录实际值、是否通过、使用的提交号。首次通过后去掉临时日志再跑一次。若问题只有原项目出现,把最小修复迁回原项目,并重复同样的五项检查。
交付给下一次对话的记录
保留三个文件或笔记段落:问题描述、最终修改摘要、回归记录。摘要要写“哪个节点在哪个阶段连接了哪个处理函数”,而不是只写“已优化”。遇到修复失败就回到上一个可运行提交,避免让十几次相互覆盖的修改成为新的未知条件。这个流程也适合背包按钮、关卡重开、对话框确认等 UI 问题。下一步可阅读站内“AI 生成代码怎么验收”,把手动用例逐步变成自动检查。