开始之前
完成条件、事件与模块课。新建 Lesson28,只放一个实验 Script,避免旧代码干扰。
Roblox Studio · 第 28 课
练习读 Output、加断点、观察变量和使用 assert,把“好像能玩”变成可重复的测试。
Course overview
调试不是证明自己写错了,而是寻找“电脑实际做了什么”和“我希望它做什么”之间的差别。每位开发者都会遇到它。
这一课在副本中研究三个常见问题:找错对象、边界写错、事件连接重复。你会记录预期、实际和最小修改,让问题可以被别人复现。
完成条件、事件与模块课。新建 Lesson28,只放一个实验 Script,避免旧代码干扰。
三份可解释的修复记录,以及一段能够自动检查边界的测试代码。
能读第一条报错的脚本名与行号;修复后重新验证正常、边界与失败情况。

Learning route
每完成一小步,就测试一次。先说出你预计会看到什么,再用 Play 和 Output 检查,不用急着一次写完所有代码。
“金币坏了”太模糊。“进入游戏,碰一次 Coin,Coins 从 0 变成 2”就能帮助别人找到问题。
在 Workspace 创建 Coin,然后在 DebugLab 中运行下面这个故意出错的小例子。Cion 拼错了,FindFirstChild 返回 nil,下一行访问 Color 就会报错。
把 >= 写成 > 不会产生语法报错,但会拒绝“刚好达到门槛”的玩家。用三个数字测试,比只试一次更容易发现它。
如果按钮每次点击让数字增加两次,先搜索是否有两份脚本,或同一个事件被 Connect 两次。更新界面的 render 函数不应该每次都重新连接事件。
在 Script Editor 行号旁设置断点,Play 时让程序停在比较或赋值前。用 Watch 或变量悬停查看 energy,而不是凭想象猜它是多少。
无意义的每帧 print 会淹没真正问题;不断 Instance.new 却不清理的对象会越积越多。先测量与定位,再决定优化什么。
Step by step
“金币坏了”太模糊。“进入游戏,碰一次 Coin,Coins 从 0 变成 2”就能帮助别人找到问题。
每轮调试只改一个原因。改完回到同一个起点重复操作,才能判断修复是否有效。
Step by step
在 Workspace 创建 Coin,然后在 DebugLab 中运行下面这个故意出错的小例子。Cion 拼错了,FindFirstChild 返回 nil,下一行访问 Color 就会报错。
修复是把名字改为 Coin,并在必要时明确检查对象是否存在。给错名字增加等待并不能变出一个对象。
local coin = workspace:FindFirstChild("Cion") -- 故意拼错
coin.Color = Color3.fromRGB(80, 220, 130)
Step by step
把 >= 写成 > 不会产生语法报错,但会拒绝“刚好达到门槛”的玩家。用三个数字测试,比只试一次更容易发现它。
下面是修复后的完整测试。assert 会在条件不成立时停止并说明哪个情况失败。这里没有场景依赖,适合独立运行。
local function canEnter(energy)
return energy >= 5
end
assert(canEnter(4) == false, "Below threshold")
assert(canEnter(5) == true, "Exactly at threshold")
assert(canEnter(6) == true, "Above threshold")
print("All boundary checks passed")
Step by step
如果按钮每次点击让数字增加两次,先搜索是否有两份脚本,或同一个事件被 Connect 两次。更新界面的 render 函数不应该每次都重新连接事件。
需要长期重复开启和关闭功能时,保留连接对象,并在不需要时 Disconnect。普通按钮通常只在脚本启动时连接一次就够了。
Step by step
在 Script Editor 行号旁设置断点,Play 时让程序停在比较或赋值前。用 Watch 或变量悬停查看 energy,而不是凭想象猜它是多少。
调试结束后移除或禁用断点,再正常运行一次。否则下次测试突然暂停,会让你误以为游戏卡住。

Step by step
无意义的每帧 print 会淹没真正问题;不断 Instance.new 却不清理的对象会越积越多。先测量与定位,再决定优化什么。
本课的验收是可重复的结果,不是宣称“完全没有 bug”。记录你测了什么、没测什么,才方便下一次继续。
Homework
写清复现步骤、预期、实际、原因、修改与再次测试结果。
把门槛改为 8,对 7、8、9 各加一条测试。
检查之前项目有没有重复脚本、没等待的循环或未清理的连接。
Exit questions
不代表,例如边界比较写错可能正常运行却给出错误结果。
后面的错误可能只是前一个问题引起的连锁反应。
冷却可能掩盖现象,仍应找出重复脚本或重复 Connect。
清除断点,重新正常运行,并重复原来的复现步骤。
Explore further
正文代码可以直接复制。先确认脚本类型、放置位置,以及这段代码是完整版本还是小实验;不要把同一脚本的多个版本叠加运行。界面参考图已标注来源,图中的对象名可能与本课不同,请以操作步骤为准。