按钮可以被玩家用来解锁新区域、获得积分和揭示宝藏。每当玩家触碰按钮时,它应该给出一些反馈,让玩家知道正在与之互动,比如改变颜色或发出声音。
在这个例子中,按钮将用于激活一座桥。当按钮被按下时,它将变为绿色,玩家将能够使用这座桥。如果玩家没有按下按钮,他们在尝试走上桥时将会掉下去。
创建一座桥
首先设置桥梁。
在你的环境中创建一个玩家需要桥梁的区域。
创建一个桥梁的部件并将其重命名为“Bridge”。
选择桥梁,在属性窗口中:
- 将 Transparency 改为 .5。对于透明度,0 是可见的,1 是不可见的。
- 勾选 Anchor。
- 取消勾选 CanCollide。
当你测试游戏时,桥应该看起来是朦胧的,人们还不能走上去。

创建按钮
现在桥梁已经设置好了,创建按钮。
创建一个名为 Button 的新部件。
将按钮颜色改为红色。
Anchor 按钮。
移动按钮,使其稍微悬浮而不接触任何东西。这是为了确保 Touched 事件不会意外触发。

使按钮可交互
这次,不是使用 Touched 事件来创建一个陷阱,而是用它来创建一个使桥梁可用的按钮。为了使桥梁可碰撞,使用代码 bridge.CanCollide = true 在玩家触碰按钮时运行的自定义函数中。你知道完成以下步骤所需的一切。
在查看代码解决方案之前,尝试自己解决。
- 在按钮中插入一个名为 ActivateBridge 的新 script。
- 删除 Hello World。
- 为桥梁和按钮创建变量。
- 创建一个 local function,使按钮被触碰时执行以下操作:
- 打印 "button touched"。
- 在被触碰时将按钮的颜色从红色改为绿色。
- 将桥的透明度改为 0 以使其可见。
- 通过使用代码 bridge.CanCollide = true 使桥可用。
- 将函数连接到按钮的 Touched 事件。
- 测试脚本,确保在按钮被触碰时桥出现。
代码解决方案 以下是一个可能的代码解决方案
-- 将此脚本插入按钮
-- 当某物触碰按钮时,将按钮变为绿色。
local button = script.Parent
local bridge = workspace.Bridge
local function buttonPressed()
print("button touched")
button.Color = Color3.fromRGB(0, 170, 0)
bridge.Transparency = 0
bridge.CanCollide = true
end
button.Touched:Connect(buttonPressed)排查代码问题
问题:游戏开始时桥已经是实心的。 确保部件被固定并且没有接触任何东西。部件可能会接触到某些东西,比如地形或另一个部件,从而导致 buttonPressed() 函数意外触发。
问题:你在输出窗口中收到错误:“Bridge is not a valid member of Workspace” 检查以下内容:
- 桥的命名。脚本中的桥必须与资源管理器中的名称完全相同。
- part.Touched:Connect(buttonPressed) 必须在 buttonPressed() 函数之外。
可选代码挑战
本课中的脚本也可以用来保持门关闭,以防止玩家进入特定区域。练习你的编码技能,完成以下任务:
- 创建一个门部件。
- 在离门更远的地方创建一个按钮。
- 更改本课中的脚本,使其使门改变透明度,并使玩家无法与之碰撞。
你的版本可能看起来像这样:
local button = script.Parent
-- 提醒:将部件的名称 Gate 替换为你项目中的名称
local gate = workspace.Gate
local function buttonPressed()
print("button touched")
-- 将按钮更改为红色以给玩家反馈
button.BrickColor = BrickColor.Red() -- 更改此处
-- 使门不可见
gate.Transparency = 1
-- 使玩家可以穿过门
gate.CanCollide = false
end
button.Touched:Connect(buttonPressed)