接近提示

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

您可以创建交互式接近提示,当用户接近3D空间中的对象时出现,然后在用户输入时触发动作。

本教程使用 Dungeon Delve 项目作为展示。要跟随教程,请在继续之前在Studio中打开它。

游戏主页中的在Studio中编辑选项

创建提示

屏幕上的提示是由一个 ProximityPrompt 对象生成的,该对象被父级到 AttachmentBasePartModel

  1. 在3D视图或 Explorer 中选择 PrisonDoor 模型(WorkspacePromptObjectsPrisonDoor)。

  2. 展开其树形结构并选择 Door 对象。

  3. 将提示放置在 Attachment 上可以更好地控制交互点的位置,而不是直接放置在部件/模型上。插入一个新的 Attachment 并将其重命名为 PromptAttachment

  4. 找到新附件的 Position 属性并将其设置为 -2.25-0.5-0.5。这将使其移动到门的钥匙孔前面。

  5. 将鼠标悬停在 PromptAttachment 上并插入一个新的 ProximityPrompt 对象。

提示外观

提示由三个主要元素组成,每个元素都可以通过以下属性进行控制:

  • ObjectText — 与之交互的对象的可选名称。
  • ActionText — 显示给用户的可选动作名称。
  • KeyboardKeyCode — 将触发提示的键盘按键。
  • GamepadKeyCode — 将触发提示的游戏手柄按钮。

要自定义监狱门提示的外观,请进行以下更改:

  1. Properties 窗口中,找到 ObjectText 属性并输入 Door

  2. 对于 ActionText 属性,输入 Pick Lock

激活距离

当用户的 character 移动到提示对象父级的定义 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 项目中,这些事件由 ServerScriptService 中的 PromptEvents 脚本管理。

在脚本内部,上述事件简单地调用 ObjectActions ModuleScript 中的函数,该模块也位于 ServerScriptService 中。

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)

接近提示是游戏内对象交互的便捷且可定制的解决方案。查看 ProximityPromptProximityPromptService 参考页面以获取更多控制提示行为的方法,并在 Dungeon Delve 中探索其他交互对象以获取创意灵感。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。