Roblox Studio · 第 5 课

条件判断:让通行门学会做决定

用 if、elseif、else 和比较运算,制作会根据能量值改变状态的通行门。

10–15 岁 60 分钟 if / elseif / else 动手实践 测试与保存

Course overview

一扇门,三种回答:不能通过、刚好够用、能量充足。

上一课的触碰机关已经会回应你。这次,你要让游戏先检查一个条件,再决定做什么。就像游乐园会检查身高,探险基地的门也能检查能量。

先别急着连接金币或背包。我们先用一个数字模拟能量,把规则测试清楚;以后再接上真实的玩家数据。

01 · BEFORE

开始之前

完成第 3–4 课,能创建 Script,知道变量、函数和 Output 的作用。

02 · MAKE

你的作品

一个根据 energy 变色、显示通行信息并改变碰撞状态的 Gate。

03 · CHECK

完成标志

分别输入 3、5、8,得到三种预期结果;能解释为什么 5 应该被允许通过。

本课 Gate 变为黄色,Output 显示允许通行
图 5-1 · Studio 实拍:energy=5 时,Gate 变黄,Output 显示 Enough energy。这里使用 Run 观察脚本;请再用 Play 操纵角色检查碰撞。

Learning route

先准备,再动手;看到结果后,记得保存。

每完成一小步,就测试一次。先说出你预计会看到什么,再用 Play 和 Output 检查,不用急着一次写完所有代码。

1

01 · 搭好一扇练习门

新建 Baseplate,另存为“姓名缩写_Lesson05”。这一课是独立小实验,不必把前一课的所有脚本搬过来。

2

02 · 先猜结果,再运行比较

= 是把右边的值存进左边;== 是问“两边相等吗”。比较的回答只有 true 或 false。

3

03 · 用 if 把规则连到门上

程序从上往下检查条件,进入第一个符合的分支后,就跳过同一组剩下的 elseif 和 else。先检查更高的门槛,才能区分“能量充足”和“刚好够用”。

4

04 · 两个条件,要同时满足吗

and 表示两件事都要成立;or 表示至少一件成立;not 把真假反过来。把条件读成一句中文,比死记符号更容易。

5

05 · 给门做一张测试小票

不能只测试“能通过”的情况。3、5、8 分别检查不够、边界和更高分支。再试 4,你就能发现把 >= 写成 > 之类的小错误。

Step by step

01 · 搭好一扇练习门

新建 Baseplate,另存为“姓名缩写_Lesson05”。这一课是独立小实验,不必把前一课的所有脚本搬过来。

门先固定在地面上。Anchored 决定会不会被物理推动,CanCollide 决定能不能穿过去,它们解决的是两件不同的事。

  1. 在 Workspace 插入 Part,命名 Gate;Size 设为 10, 10, 1,Position 设为 0, 5, -12。
  2. 勾选 Anchored、CanCollide;颜色先设为红色。
  3. 在 ServerScriptService 新建普通 Script,命名 GateRule。打开 Output。

Step by step

02 · 先猜结果,再运行比较

= 是把右边的值存进左边;== 是问“两边相等吗”。比较的回答只有 true 或 false。

>= 表示大于或等于。门要求至少 5 点能量,因此 5 也合格。这个“刚好碰到边界”的数字,最值得测试。

  1. 把下面的短实验放进 GateRule,Play 后读取 Output。
  2. 依次把 energy 改为 3、5、8;每次先 Stop,写下预测再运行。
ServerScriptService > GateRule · 比较实验(稍后替换)Luau
local energy = 5
print("Exactly five:", energy == 5)
print("Enough energy:", energy >= 5)
print("Not enough:", energy < 5)
Output 中查看比较结果的官方界面参考
图 5-2:官方 Output 界面参考:比较实验的 true/false 会出现在这里。留意消息右侧的脚本名与行号。Roblox Creator Documentation · CC BY 4.0 · 原图未修改 · 许可说明

Step by step

03 · 用 if 把规则连到门上

程序从上往下检查条件,进入第一个符合的分支后,就跳过同一组剩下的 elseif 和 else。先检查更高的门槛,才能区分“能量充足”和“刚好够用”。

下面是完整脚本,请替换刚才的实验。三个颜色只是反馈,真正决定通行的是 CanCollide。运行中的修改会在 Stop 后恢复。

  1. 将 GateRule 全部替换为下方代码。
  2. 先用 energy = 5 测试,再分别改成 3 和 8。
  3. 走到门前试着穿过:3 应被挡住,5 和 8 应可通过。
ServerScriptService > GateRule · 完整脚本Luau
local gate = workspace:WaitForChild("Gate")
local energy = 5
local REQUIRED = 5

if energy >= 8 then
    gate.Color = Color3.fromRGB(70, 220, 130)
    gate.CanCollide = false
    print("Energy full: welcome!")
elseif energy >= REQUIRED then
    gate.Color = Color3.fromRGB(255, 200, 70)
    gate.CanCollide = false
    print("Enough energy: you may enter.")
else
    gate.Color = Color3.fromRGB(225, 80, 85)
    gate.CanCollide = true
    print("Need more energy:", REQUIRED - energy)
end

Step by step

04 · 两个条件,要同时满足吗

and 表示两件事都要成立;or 表示至少一件成立;not 把真假反过来。把条件读成一句中文,比死记符号更容易。

把下面的小实验临时加在完整脚本末尾。它只打印规则,不会改变门。isOpen = false 时,即使能量足够,也不能进入正在维修的基地。

  1. 先预测 energy = 5、isOpen = false 的输出。
  2. 把 isOpen 改为 true 再试。
  3. 实验结束后保留你想要的门规则,不要让多个脚本同时控制 Gate。
GateRule 末尾 · 逻辑实验Luau
local isOpen = false
local canEnter = energy >= REQUIRED and isOpen
print("Can enter:", canEnter)
print("Closed for repairs:", not isOpen)

Step by step

05 · 给门做一张测试小票

不能只测试“能通过”的情况。3、5、8 分别检查不够、边界和更高分支。再试 4,你就能发现把 >= 写成 > 之类的小错误。

这节课的 energy 是整个脚本中的测试数字,还不是每位玩家各自拥有的能量。第 18 课会把类似规则放进服务器请求处理中。

  1. 记录 3 → 红色、被挡住、还差 2;5 → 黄色、可通过;8 → 绿色、可通过。
  2. 门没变化:检查名称 Gate 和脚本运行位置。
  3. Output 一直等待:检查 Gate 是否是 Workspace 的直接子对象。
  4. Stop 后保存,给自己留下一份通过测试的版本。

Homework

轮到你来改一改,做出自己的版本。

1 更换门槛

将最低能量改为 6,高能量分支改为 10,重新测试 5、6、10。

2 写一张规则卡

用中文写出 if、elseif、else 各自处理哪一种情况。

3 选做:维修开关

让 isOpen = false 时始终保持门关闭,并在 Output 解释原因。

完成标准:先在 Playtest 中验证作品,再点击 Stop,保存为“姓名缩写_Lesson05”或对应 Homework 副本;不要覆盖上一课的可运行版本。

Exit questions

先自己回答,再展开看看。

energy = 5 和 energy == 5 有什么区别?

前者赋值,后者比较,比较会得到 true 或 false。

为什么先检查 energy >= 8?

因为 8 也满足 >= 5。如果先进入较低门槛分支,就不会再检查较高门槛。

CanCollide=false 会让门消失吗?

不会,它只关闭碰撞。颜色、透明度和碰撞是不同属性。

最容易漏掉哪一个测试值?

刚好等于门槛的值,例如 5;它能检验 > 与 >= 的区别。

Explore further

需要查资料时,从这里出发。

正文代码可以直接复制。先确认脚本类型、放置位置,以及这段代码是完整版本还是小实验;不要把同一脚本的多个版本叠加运行。界面参考图已标注来源,图中的对象名可能与本课不同,请以操作步骤为准。