您可以创建交互式接近提示,当用户接近3D空间中的对象时出现,然后在用户输入时触发动作。
本教程使用 Dungeon Delve 项目作为展示。为了方便跟随,请在继续之前在 Studio 中打开它。

创建提示
屏幕上的提示由一个 ProximityPrompt 对象生成,该对象附属在 Attachment、BasePart 或 Model 上。
在 3D 视图中或从资源管理器中选择 PrisonDoor 模型(Workspace → PromptObjects → PrisonDoor)。
展开其树形结构并选择 Door 对象。
将提示放置在 Attachment 上可以让您更好地控制交互点的位置,而不是直接放置在部件/模型上。插入一个新的 Attachment 并将其重命名为 PromptAttachment。
找到新附件的 Position 属性并将其设置为 -2.25、-0.5、-0.5。这将把它移到门的钥匙孔前面。
悬停在 PromptAttachment 上并插入一个新的 ProximityPrompt 对象。
提示外观
提示由三个主要元素组成,每个元素可以通过以下属性进行控制:

- ObjectText — 可选的对象名称,用于与之交互的对象。
- ActionText — 可选的行动名称,显示给用户。
- KeyboardKeyCode — 触发提示的键盘按键。
- GamepadKeyCode — 触发提示的游戏手柄按钮。
要自定义监狱门提示的外观,请进行以下更改:
在属性窗口中找到 ObjectText 属性并输入 Door。
对于 ActionText 属性,输入 Pick Lock。
激活距离
当用户的 字符 移动到提示对象父级的定义 MaxActivationDistance 范围内时,提示将出现。

默认值在大多数情况下运行良好,但您可以通过将 MaxActivationDistance 改为 4 来使用户与锁的交互更近。

按住持续时间
HoldDuration 属性值决定提示的动作触发速度,以秒为单位。由于此门必须被破解以解锁,请将 HoldDuration 属性更改为 4。

实现一个动作
检测提示事件的最佳方式是通过 ProximityPromptService — 这让您可以集中检测事件,而无需将脚本附加到每个提示对象上。
基本的框架如下:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- 检测提示被触发时
local function onPromptTriggered(promptObject, player)
end
-- 检测提示按住开始时
local function onPromptHoldBegan(promptObject, player)
end
-- 检测提示按住结束时
local function onPromptHoldEnded(promptObject, player)
end
-- 将提示事件连接到处理函数
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
事件 | 描述 |
---|---|
PromptTriggered | 当用户与提示互动时触发(在非零 HoldDuration 持续时间之后)。 |
PromptButtonHoldBegan | 当用户开始与非零 HoldDuration 提示进行交互时触发。 |
PromptButtonHoldEnded | 当用户停止与非零 HoldDuration 提示进行交互时触发。 |
在 Dungeon Delve 项目中,这些事件由 PromptEvents 脚本管理,该脚本位于 ServerScriptService 中。

在脚本内,上述事件只是调用位于 ServerScriptService 中的 ObjectActions ModuleScript 内的函数。
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- 检测提示被触发时
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- 检测提示按住开始时
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- 检测提示按住结束时
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- 将提示事件连接到处理函数
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
接近提示是一种方便且可自定义的解决方案,用于游戏中的对象交互。查看 ProximityPrompt 和 ProximityPromptService 参考页面以获取更多控制提示行为的方法,并探索 Dungeon Delve 中的其他交互对象以获取创意灵感。