Vous pouvez créer des prompts de proximité interactifs qui apparaissent lorsque les utilisateurs s'approchent d'objets dans l'espace 3D, puis déclencher des actions sur l'entrée de l'utilisateur.
Ce tutoriel utilise le projet Dungeon Delve comme vitrine. Pour suivre, ouvrez-le dans Studio avant de continuer.

Créer un prompt
Les prompts à l'écran sont générés par un objet ProximityPrompt parenté à un Attachment, BasePart ou Model.
Sélectionnez le modèle PrisonDoor dans la vue 3D ou depuis l'Explorateur (Workspace → PromptObjects → PrisonDoor).


Développez son arbre et sélectionnez l'objet Door.

Placer un prompt sur un Attachment vous donne plus de contrôle sur l'endroit où le point d'interaction se produit, par rapport à le placer directement sur la pièce/le modèle. Insérez une nouvelle Attachment et renommez-la en PromptAttachment.

Localisez la propriété Position de la nouvelle pièce jointe et définissez-la sur -2.25, -0.5, -0.5. Cela va le déplacer devant le trou de la clé de la porte.


Survolez PromptAttachment et insérez un nouvel objet ProximityPrompt.

Apparence du prompt
Les prompts se composent de trois éléments principaux, chacun pouvant être contrôlé par les propriétés suivantes :

- ObjectText — Un nom optionnel pour l'objet avec lequel l'utilisateur interagit.
- ActionText — Un nom d'action optionnel affiché à l'utilisateur.
- KeyboardKeyCode — La touche du clavier qui déclenchera le prompt.
- GamepadKeyCode — Le bouton de la manette qui déclenchera le prompt.
Pour personnaliser l'apparence du prompt de la porte de la prison, effectuez les modifications suivantes :
Dans la fenêtre Propriétés, localisez la propriété ObjectText et tapez Door.

Pour la propriété ActionText, tapez Pick Lock.

Distance d'activation
Les prompts apparaissent lorsque le personnage de l'utilisateur se déplace à l'intérieur de la portée définie MaxActivationDistance de l'objet parent du prompt.

La valeur par défaut fonctionne bien dans la plupart des cas, mais vous pouvez rapprocher l'interaction utilisateur de la serrure en modifiant MaxActivationDistance à 4.

Durée de maintien
La valeur de la propriété HoldDuration détermine la rapidité avec laquelle l'action du prompt est déclenchée, en secondes. Puisque cette porte doit être crochettée pour être déverrouillée, changez la propriété HoldDuration à 4.

Implémenter une action
Le meilleur moyen de détecter les événements de prompt est via ProximityPromptService — cela vous permet de détecter les événements de manière centrale sans attacher un script à chaque objet prompt.
Un cadre de base est le suivant :
local ProximityPromptService = game:GetService("ProximityPromptService")
-- Détecter lorsque le prompt est déclenché
local function onPromptTriggered(promptObject, player)
end
-- Détecter lorsque le maintien du prompt commence
local function onPromptHoldBegan(promptObject, player)
end
-- Détecter lorsque le maintien du prompt se termine
local function onPromptHoldEnded(promptObject, player)
end
-- Connecter les événements du prompt aux fonctions de gestion
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
| Événement | Description |
|---|---|
| PromptTriggered | Se déclenche lorsqu'un utilisateur interagit avec un prompt (après la durée pour un prompt avec HoldDuration non nul). |
| PromptButtonHoldBegan | Se déclenche lorsqu'un utilisateur commence à interagir avec un prompt ayant une HoldDuration non nulle. |
| PromptButtonHoldEnded | Se déclenche lorsqu'un utilisateur arrête d'interagir avec un prompt ayant une HoldDuration non nulle. |
Dans le projet Dungeon Delve, ces événements sont gérés par le script PromptEvents au sein de ServerScriptService.

À l'intérieur du script, les événements ci-dessus appellent simplement des fonctions dans le ModuleScript ObjectActions, également situé dans ServerScriptService.
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- Détecter lorsque le prompt est déclenché
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- Détecter lorsque le maintien du prompt commence
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- Détecter lorsque le maintien du prompt se termine
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- Connecter les événements du prompt aux fonctions de gestion
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)
Les prompts de proximité sont une solution pratique et personnalisable pour l'interaction avec les objets dans le jeu. Consultez les pages de référence ProximityPrompt et ProximityPromptService pour encore plus de façons de contrôler le comportement des prompts, et explorez d'autres objets interactifs dans Dungeon Delve pour des inspirations créatives.