Puedes crear prompts de proximidad interactivos que aparecen cuando los usuarios se acercan a objetos en el espacio 3D, y luego desencadenan acciones en la entrada del usuario.
Este tutorial utiliza el proyecto Dungeon Delve como escaparate. Para seguirlo, ábrelo en Studio antes de continuar.

Crear un prompt
Los prompts en pantalla son generados por un objeto ProximityPrompt que está parentado a un Attachment, BasePart o Model.
Selecciona el modelo PrisonDoor en la vista 3D o desde el Explorer (Workspace → PromptObjects → PrisonDoor).


Expande su árbol y selecciona el objeto Door.

Colocar un prompt en un Attachment te da más control sobre dónde ocurre el punto de interacción, en comparación con colocarlo directamente en la parte/modelo. Inserta un nuevo Attachment y renómbralo a PromptAttachment.

Localiza la propiedad Position del nuevo attachment y configúralo en -2.25, -0.5, -0.5. Esto lo moverá frente al agujero de la llave de la puerta.


Pasa el cursor sobre PromptAttachment e inserta un nuevo objeto ProximityPrompt.

Apariencia del prompt
Los prompts consisten en tres elementos principales, cada uno de los cuales puede ser controlado por las siguientes propiedades:

- ObjectText — Un nombre opcional para el objeto con el que se está interactuando.
- ActionText — Un nombre de acción opcional que se muestra al usuario.
- KeyboardKeyCode — La tecla del teclado que desencadenará el prompt.
- GamepadKeyCode — El botón del gamepad que desencadenará el prompt.
Para personalizar la apariencia del prompt de la puerta de prisión, realiza los siguientes cambios:
En la ventana de Properties, localiza la propiedad ObjectText y escribe Door.

Para la propiedad ActionText, escribe Pick Lock.

Distancia de activación
Los prompts aparecen cuando el personaje del usuario se mueve dentro del rango definido de MaxActivationDistance del objeto padre del prompt.

El valor predeterminado funciona bien en la mayoría de los casos, pero puedes acercar la interacción del usuario a la cerradura cambiando MaxActivationDistance a 4.

Duración de la retención
El valor de la propiedad HoldDuration determina qué tan rápido se desencadena la acción del prompt, en segundos. Dado que esta puerta debe ser forzada para desbloquearla, cambia la propiedad HoldDuration a 4.

Implementar una acción
La mejor manera de detectar eventos de prompts es a través de ProximityPromptService — esto te permite detectar eventos de manera central sin tener que adjuntar un script a cada objeto de prompt.
Un marco básico es el siguiente:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- Detecta cuando se activa el prompt
local function onPromptTriggered(promptObject, player)
end
-- Detecta cuando comienza la retención del prompt
local function onPromptHoldBegan(promptObject, player)
end
-- Detecta cuando finaliza la retención del prompt
local function onPromptHoldEnded(promptObject, player)
end
-- Conectar eventos del prompt a funciones de manejo
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
| Evento | Descripción |
|---|---|
| PromptTriggered | Se activa cuando un usuario interactúa con un prompt (después de la duración de un prompt con HoldDuration diferente de cero). |
| PromptButtonHoldBegan | Se activa cuando un usuario comienza a interactuar con un prompt con HoldDuration diferente de cero. |
| PromptButtonHoldEnded | Se activa cuando un usuario deja de interactuar con un prompt con HoldDuration diferente de cero. |
En el proyecto Dungeon Delve, estos eventos son gestionados por el script PromptEvents dentro de ServerScriptService.

Dentro del script, los eventos anteriores simplemente llaman a funciones dentro del ModuleScript ObjectActions, que también se encuentra en ServerScriptService.
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- Detecta cuando se activa el prompt
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- Detecta cuando comienza la retención del prompt
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- Detecta cuando finaliza la retención del prompt
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- Conectar eventos del prompt a funciones de manejo
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
Los prompts de proximidad son una solución conveniente y personalizable para la interacción de objetos en el juego. Consulta las páginas de referencia de ProximityPrompt y ProximityPromptService para obtener aún más maneras de controlar el comportamiento de los prompts, y explora otros objetos interactivos en Dungeon Delve para inspiración creativa.