添加邻近提示

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

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

本教程使用 地牢深渊 项目作为展示。要跟随以下步骤,请在 Studio 中打开它,然后继续。

Edit in Studio option from the experience's main page

创建提示

屏幕上的提示由一个 ProximityPrompt 对象生成,该对象是一个 AttachmentBasePart 或 2>Class.Model2> 的父级。

  1. 从 3D 视图或从 Explorer ( 工作区提示对象 → 1> 监狱门1> 选择模型。

  2. 扩展其树,然后选择 对象。

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

  4. 找到新的附件的 位置 属性并将其设置为 -2.25-0.5 、 - 1>0.51> 。 这将它移动到门的钥匙孔前。

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

提示外观

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

  • 对象文本 — 可选名称对象与互动。
  • ActionText — 用户所显示的可选动作名称。
  • KeyboardKeyCode — 键盘上的键码,会触发提示。
  • 游戏手柄键代码 — 游戏手柄按钮,将触发提示。

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

  1. 在属性窗口中,找到对象文本属性,然后输入门。

  2. 对于 ActionText 属性,请输入 锁定选择器

激活距离

提示出现,当用户的 角色 在提示对象的定义的 MaxActivationDistance 范围内移动时。

默认值在大多数情况下都很好用,但您可以通过将 最大激活距离 改为 4 来将用户交互靠近锁。

持续时间

持续时间 属性值决定提示的行动是否在几秒内触发。由于此门必须被选择解锁,因此将 持续时间 属性值修改为 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 中管理。

在脚本中,上述的事件只是在 对象操作 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)

邻近提示是游戏中对象互动的方便和可定制的解决方案。查看ProximityPromptProximityPromptService参考页面,了解更多控制提示行为的方法,并探索其他互动对象在地牢探索中创造灵感。