ProximityPrompt 对象 鼓励用户与游戏中的对象(如门、灯开关和按钮)进行交互以触发动作。使用此对象,您可以:
- 指示用户可以在游戏中与哪些对象进行交互。
- 显示用户可以在对象上执行的动作,然后通过用户输入(如按下或按住一个键)触发该动作。
- 显示所有输入类型的正确输入,例如键盘、游戏手柄和触摸屏按键。
创建接近提示
您必须将接近提示作为父对象附加到您希望用户与之交互的部件、模型或附件上。要将接近提示添加到 BasePart、Model 或 Attachment 对象:
在 Explorer 窗口中,将鼠标悬停在 BasePart、Model 或 Attachment 上,然后单击 ⊕ 按钮。将显示上下文菜单。
从菜单中插入一个 ProximityPrompt。

自定义接近提示
您可以根据希望接近提示的 外观、希望其 可见性 以及希望用户如何 触发动作 来自定义接近提示。
外观
接近提示需要传达三件事:
- 用户可以与之交互的 对象。
- 当他们与接近提示交互时触发的 动作。
- 用户必须按下或按住的 键。
您可以通过以下属性指定这些内容:
ObjectText 用户可以与之交互的对象的可选名称。
ActionText 用户将触发的动作的可选名称。
KeyboardKeyCode 用户必须按下或按住的键盘键以触发该动作。
GamepadKeyCode 用户必须按下或按住的游戏手柄键以触发该动作。

可见性
您可以通过其 MaxActivationDistance、RequiresLineOfSight 和 Exclusivity 属性控制接近提示何时可见。
MaxActivationDistance
MaxActivationDistance 属性允许您定义激活接近提示可见性的范围。一旦用户的角色进入该范围,接近提示将变得可见。

RequiresLineOfSight
RequiresLineOfSight 属性在从 相机 到 ProximityPrompt 对象之间有清晰路径时激活接近提示的可见性。默认情况下,此属性设置为 true。
Exclusivity
如果用户的角色在多个接近提示的范围内,则每个接近提示的可见性取决于相机指向哪个接近提示,以及每个接近提示的 Exclusivity 属性值。

交互性
您可以通过其 HoldDuration 和 ClickablePrompt 属性自定义用户如何与接近提示交互。
HoldDuration
HoldDuration 属性确定用户必须按下一个键的秒数,才能触发接近提示的动作。如果此属性的值为 0,则接近提示的动作会立即触发。
ClickablePrompt
ClickablePrompt 属性指定用户是否可以单击接近提示以触发其动作。当设置为 true 时,用户可以通过直接单击接近提示 或 按下指定的键与接近提示进行交互。当设置为 false 时,用户只能通过按下指定的键与接近提示进行交互。
脚本接近提示
您可以在 ProximityPrompt 对象本身或通过 ProximityPromptService 全局连接到接近提示事件。ProximityPromptService 允许您从一个位置管理所有接近提示行为,防止在游戏中需要重复代码。
| 事件 | 描述 |
|---|---|
| PromptTriggered | 当玩家与接近提示交互时触发(在非零 HoldDuration 的提示持续时间之后)。 |
| PromptTriggerEnded | 当玩家停止与接近提示交互时触发。 |
| PromptButtonHoldBegan | 当玩家开始与具有非零 HoldDuration 值的接近提示交互时触发。 |
| PromptButtonHoldEnded | 当玩家停止与具有非零 HoldDuration 值的接近提示交互时触发。 |
| PromptShown | 当接近提示变为可见时在 LocalScripts 中触发。 |
| PromptHidden | 当提示被隐藏时在 LocalScripts 中触发。 |
以下代码示例包括使用 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)