您可以创建用户靠近 3D 空间中的对象时出现的交互提示,然后在用户输入上触发操作。
本教程使用 地牢深渊 项目作为展示。要跟随以下步骤,请在 Studio 中打开它,然后继续。
创建提示
屏幕上的提示由一个 ProximityPrompt 对象生成,该对象是一个 Attachment、BasePart 或 2>Class.Model2> 的父级。
从 3D 视图或从 Explorer ( 工作区 → 提示对象 → 1> 监狱门1> 选择模型。
扩展其树,然后选择 门 对象。
将提示放在 Attachment 上,您可以更好地控制交互点的位置,而不是直接放置它在零件/模型上。 插入一个新的 附件 并将其重命名为 提示附件 。
找到新的附件的 位置 属性并将其设置为 -2.25 、 -0.5 、 - 1>0.51> 。 这将它移动到门的钥匙孔前。
将鼠标悬停在 PromptAttachment 上,并插入一个新的 ProximityPrompt 对象。
提示外观
提示由三个主要元素组成,每个元素都可以通过以下属性来控制:
- 对象文本 — 可选名称对象与互动。
- ActionText — 用户所显示的可选动作名称。
- KeyboardKeyCode — 键盘上的键码,会触发提示。
- 游戏手柄键代码 — 游戏手柄按钮,将触发提示。
要自定义监狱门提示的外观,请进行以下更改:
在属性窗口中,找到对象文本属性,然后输入门。
对于 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)
邻近提示是游戏中对象互动的方便和可定制的解决方案。查看ProximityPrompt和ProximityPromptService参考页面,了解更多控制提示行为的方法,并探索其他互动对象在地牢探索中创造灵感。