title | description |
---|---|
Proximity Prompts |
Proximity Prompts allow users to trigger actions when they approach objects in the 3D space. |
Class.ProximityPrompt
objects
encourage user interaction to trigger an action when they approach in-experience
objects such as doors, light switches, and buttons. Using this object, you can:
- Indicate what objects a user can interact with in the experience.
- Display the action a user can take on the object, then trigger the action through user input such as pressing or holding a key.
- Display the correct input for all input types, such a keyboard, gamepad, and touchscreen keys.
You must parent proximity prompts to the part, model, or attachment that you want a user to interact with. To add a proximity prompt to a Class.BasePart
, Class.Model
, or Class.Attachment
object:
-
In the Explorer window, hover over the
Class.BasePart
,Class.Model
, orClass.Attachment
and click the ⊕ button. A contextual menu displays. -
From the menu, insert a ProximityPrompt.
You can customize a proximity prompt based on how you want it to appear, when you want it to be visible, and what you want a user to do to trigger the action.
Proximity prompts need to communicate three things:
- The object that a user can interact with.
- The action that triggers when they interact with the proximity prompt.
- The key that a user must press or hold.
You can specify these through the following properties:
-
Class.ProximityPrompt.ObjectText|ObjectText
An optional name for the object a user can interact with. -
Class.ProximityPrompt.ActionText|ActionText
An optional name for the action a user will trigger. -
Class.ProximityPrompt.KeyboardKeyCode|KeyboardKeyCode
The keyboard key a user must press or hold to trigger the action. -
Class.ProximityPrompt.GamepadKeyCode|GamepadKeyCode
The gamepad key a user must press or hold to trigger the action.
You can control when the proximity prompt is visible through its Class.ProximityPrompt.MaxActivationDistance|MaxActivationDistance
, Class.ProximityPrompt.RequiresLineOfSight|RequiresLineOfSight
, and Class.ProximityPrompt.Exclusivity|Exclusivity
properties.
The Class.ProximityPrompt.MaxActivationDistance|MaxActivationDistance
property allows you to define the range from around the Class.ProximityPrompt
object that activates the visibility of the proximity prompt. Once a user's character enters that range, the proximity prompt becomes visible.
The Class.ProximityPrompt.RequiresLineOfSight|RequiresLineOfSight
property activates the visibility of the proximity prompt when there's a clear path from the camera to the Class.ProximityPrompt
object. By default, this property is set to true.
If a user's character is within range of multiple proximity prompts, each proximity prompt's visibility depends on which proximity prompt the camera is pointing at, as well as each proximity prompt's Class.ProximityPrompt|Exclusivity
property value.
You can customize how a user interacts with a proximity prompt through its Class.ProximityPrompt.HoldDuration|HoldDuration
and Class.ProximityPrompt.ClickablePrompt|ClickablePrompt
properties.
The Class.ProximityPrompt.HoldDuration|HoldDuration
property determines how many seconds a user has to press a key before the proximity prompt's action triggers. If this property has a value of 0
, the proximity prompt's action triggers immediately.
The Class.ProximityPrompt.ClickablePrompt|ClickablePrompt
property specifies if a user can click on a proximity prompt to trigger its action. When set to true, a user can interact with the proximity prompt by directly clicking the proximity prompt or by pressing the specified key. When set to false, a user can only interact with the proximity prompt by pressing the specified key.
You can connect to proximity prompt events either on the Class.ProximityPrompt
object itself or globally through Class.ProximityPromptService
. The Class.ProximityPromptService
allows you to manage all proximity prompt behavior from one location, preventing any need for duplicate code in your experience.
Event | Description |
---|---|
`Class.ProximityPromptService.Triggered|Triggered` | Fires when a player interacts with a proximity prompt (after the duration for a prompt with non-zero `Class.ProximityPrompt.HoldDuration|HoldDuration`). |
`Class.ProximityPromptService.TriggerEnded|TriggeredEnded` | Triggers when the player stops interacting with a proximity prompt. |
`Class.ProximityPromptService.PromptButtonHoldBegan|PromptButtonHoldBegan` | Fires when a player begins interacting with a proximity prompt with a non-zero `Class.ProximityPrompt.HoldDuration|HoldDuration` value. |
`Class.ProximityPromptService.PromptButtonHoldEnded|PromptButtonHoldEnded` | Fires when a player stops interacting with a proximity prompt with a non-zero `Class.ProximityPrompt.HoldDuration|HoldDuration` value. |
`Class.ProximityPromptService.PromptShown|PromptShown` | Triggers in `Class.LocalScript|LocalScripts` when a proximity prompt is made visible. |
`Class.ProximityPromptService.PromptHidden|PromptHidden` | Triggers in `Class.LocalScript|LocalScripts` when a prompt is hidden. |
The following code sample includes a basic framework for using Class.ProximityPromptService
:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- Detect when prompt is triggered
local function onPromptTriggered(promptObject, player)
end
-- Detect when prompt hold begins
local function onPromptHoldBegan(promptObject, player)
end
-- Detect when prompt hold ends
local function onPromptHoldEnded(promptObject, player)
end
-- Connect prompt events to handling functions
ProximityPromptService.Triggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)