开始之前
理解事件与每位玩家的记录。新建 Lesson13 Baseplate,不依赖金币脚本。
Roblox Studio · 第 13 课
用 ProximityPrompt 制作按键、触屏都能操作的宝箱,在服务器检查距离与冷却。
Course overview
触碰适合金币,但宝箱最好由玩家主动决定是否打开。ProximityPrompt 会在靠近时显示交互提示,并适配常见输入设备。
提示的文字、按住时长和距离都可以调整。与此同时,真正处理开启结果的服务器仍要检查玩家状态。
理解事件与每位玩家的记录。新建 Lesson13 Baseplate,不依赖金币脚本。
一个每位玩家本次会话只能领取一次的训练宝箱,用 Output 显示领取结果。
远处看不到提示,靠近可操作;同一玩家重复操作不会再领取,另一玩家仍可领取。

Learning route
每完成一小步,就测试一次。先说出你预计会看到什么,再用 Play 和 Output 检查,不用急着一次写完所有代码。
本课用一个 Part 代表宝箱,不需要从 Toolbox 下载带脚本的陌生模型。提示放在这个 Part 内,交互位置就跟随宝箱。
Triggered 是完成交互后的事件,会把触发的 Player 直接传给函数,不需要像 Touched 那样从身体零件反查玩家。
claimed[player] 记录每个人是否已经领过,玩家离开时清除。宝箱是每人一份,因此不会在第一个人领取后把整个 Prompt 禁用。
共享宝箱和每人一份的宝箱,没有哪种永远更好。关键是先说清规则,再选择一个全局 boolean 或一张按玩家索引的表。
最常见的问题是 Prompt 放错位置、距离太远或视线被遮挡。RequiresLineOfSight 开启时,遮挡会影响提示显示。
Step by step
本课用一个 Part 代表宝箱,不需要从 Toolbox 下载带脚本的陌生模型。提示放在这个 Part 内,交互位置就跟随宝箱。
图中的官方提示可能使用不同模型或语言。你要找的是 Explorer 中的 ProximityPrompt 对象,以及右侧的属性,而不是照抄图中的场景名字。
Step by step
Triggered 是完成交互后的事件,会把触发的 Player 直接传给函数,不需要像 Touched 那样从身体零件反查玩家。
HoldDuration=0.5 表示需要按住一小会儿。MaxActivationDistance 控制提示出现的范围,但界面规则不能代替服务器的奖励检查。

Step by step
claimed[player] 记录每个人是否已经领过,玩家离开时清除。宝箱是每人一份,因此不会在第一个人领取后把整个 Prompt 禁用。
距离检查从 HumanoidRootPart 到宝箱中心计算。本课宝箱较小,允许 12 studs,给显示距离 10 留一点移动与网络余量。
local Players = game:GetService("Players")
local chest = script.Parent
local prompt = chest:WaitForChild("ProximityPrompt")
local claimed = {}
prompt.Triggered:Connect(function(player)
local character = player.Character
local root = character and character:FindFirstChild("HumanoidRootPart")
local humanoid = character and character:FindFirstChildOfClass("Humanoid")
if not root or not humanoid or humanoid.Health <= 0 then return end
if (root.Position - chest.Position).Magnitude > 12 then return end
if claimed[player] then
print(player.Name, "Already claimed")
return
end
claimed[player] = true
print(player.Name, "Training chest claimed!")
end)
Players.PlayerRemoving:Connect(function(player)
claimed[player] = nil
end)
Step by step
共享宝箱和每人一份的宝箱,没有哪种永远更好。关键是先说清规则,再选择一个全局 boolean 或一张按玩家索引的表。
本课的领取记录在 Player 上下文中存在,角色重生不会重新领取,退出再进则会重置。它不是永久的每日奖励系统。
Step by step
最常见的问题是 Prompt 放错位置、距离太远或视线被遮挡。RequiresLineOfSight 开启时,遮挡会影响提示显示。
先在没有墙的空地上测试,再加装饰。这样你不会把美术问题误判成脚本报错。
Homework
把提示改为“领取补给”和“探险补给箱”,让玩家不用猜。
分别测试 HoldDuration=0 与 0.8,说明哪种更适合宝箱。
在副本中改成全体共享一次,记录为什么不能再用同一套个人提示。
Exit questions
不是,它直接传入触发交互的 Player。
本课规定每人一份,其他玩家还需要使用同一个 Prompt。
不能,服务器仍要验证角色、距离和领取记录。
不会,玩家仍在会话中;离开时才清除这条记录。
Explore further
正文代码可以直接复制。先确认脚本类型、放置位置,以及这段代码是完整版本还是小实验;不要把同一脚本的多个版本叠加运行。界面参考图已标注来源,图中的对象名可能与本课不同,请以操作步骤为准。