Możesz tworzyć interaktywne podpowiedzi z bliskiego zasięgu, które pojawiają się, gdy użytkownicy zbliżają się do obiektów w przestrzeni 3D, a następnie wyzwalają akcje na podstawie wejścia użytkownika.
Ten samouczek wykorzystuje projekt Dungeon Delve jako przykład. Aby śledzić, otwórz go w Studio przed kontynuowaniem.

Utwórz podpowiedź
Podpowiedzi na ekranie są generowane przez obiekt ProximityPrompt umieszczony w obiekcie Attachment, BasePart lub Model.
Wybierz model PrisonDoor w widoku 3D lub z Eksploratora (Workspace → PromptObjects → PrisonDoor).


Rozwiń jego drzewo i wybierz obiekt Door.

Umieszczenie podpowiedzi na Attachment daje ci większą kontrolę nad tym, gdzie następuje punkt interakcji, w porównaniu do umieszczania jej bezpośrednio na części/modelu. Wstaw nowy Attachment i zmień jego nazwę na PromptAttachment.

Zlokalizuj właściwość Position nowego załącznika i ustaw ją na -2.25, -0.5, -0.5. To przesunie go przed otwór zamka drzwi.


Najedź na PromptAttachment i wstaw nowy obiekt ProximityPrompt.

Wygląd podpowiedzi
Podpowiedzi składają się z trzech podstawowych elementów, z których każdy można kontrolować za pomocą następujących właściwości:

- ObjectText — Opcjonalna nazwa obiektu, z którym następuje interakcja.
- ActionText — Opcjonalna nazwa akcji wyświetlana użytkownikowi.
- KeyboardKeyCode — Klawisz na klawiaturze, który wyzwoli podpowiedź.
- GamepadKeyCode — Przycisk na gamepadzie, który wyzwoli podpowiedź.
Aby dostosować wygląd podpowiedzi drzwi więziennych, wprowadź następujące zmiany:
W oknie Właściwości zlokalizuj właściwość ObjectText i wpisz Door.

Dla właściwości ActionText wpisz Pick Lock.

Odległość aktywacji
Podpowiedzi pojawiają się, gdy postać użytkownika porusza się w obrębie zdefiniowanego zasięgu MaxActivationDistance obiektu rodzica podpowiedzi.

Domyślna wartość działa dobrze w większości przypadków, ale możesz zbliżyć interakcję użytkownika do zamka, zmieniając MaxActivationDistance na 4.

Czas trzymania
Wartość właściwości HoldDuration określa, jak szybko akcja podpowiedzi jest wyzwalana, w sekundach. Ponieważ te drzwi muszą być otwarte, aby je odblokować, zmień wartość właściwości HoldDuration na 4.

Wdrożenie akcji
Najlepszym sposobem na wykrywanie zdarzeń podpowiedzi jest użycie ProximityPromptService — pozwala to na centralne wykrywanie zdarzeń bez konieczności dołączania skryptu do każdego obiektu podpowiedzi.
Podstawowa struktura wygląda następująco:
local ProximityPromptService = game:GetService("ProximityPromptService")
-- Wykryj, kiedy podpowiedź jest wyzwalana
local function onPromptTriggered(promptObject, player)
end
-- Wykryj, kiedy zaczyna się trzymanie podpowiedzi
local function onPromptHoldBegan(promptObject, player)
end
-- Wykryj, kiedy kończy się trzymanie podpowiedzi
local function onPromptHoldEnded(promptObject, player)
end
-- Połącz zdarzenia podpowiedzi z funkcjami obsługi
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)| Zdarzenie | Opis |
|---|---|
| PromptTriggered | Wyzwala się, gdy użytkownik wchodzi w interakcję z podpowiedzią (po czasie trwania podpowiedzi z niezerową wartością HoldDuration). |
| PromptButtonHoldBegan | Wyzwala się, gdy użytkownik zaczyna wchodzić w interakcję z podpowiedzią o niezerowej wartości HoldDuration. |
| PromptButtonHoldEnded | Wyzwala się, gdy użytkownik przestaje wchodzić w interakcję z podpowiedzią o niezerowej wartości HoldDuration |
W projekcie Dungeon Delve te zdarzenia są zarządzane przez skrypt PromptEvents w ServerScriptService.

Wewnątrz skryptu powyższe zdarzenia po prostu wywołują funkcje w ModuleScript ObjectActions, również znajdującym się w ServerScriptService.
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- Wykryj, kiedy podpowiedź jest wyzwalana
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- Wykryj, kiedy zaczyna się trzymanie podpowiedzi
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- Wykryj, kiedy kończy się trzymanie podpowiedzi
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- Połącz zdarzenia podpowiedzi z funkcjami obsługi
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)Podpowiedzi z bliskiego zasięgu to wygodne i dostosowywalne rozwiązanie do interakcji z obiektami w grze. Sprawdź strony referencyjne ProximityPrompt i ProximityPromptService, aby uzyskać jeszcze więcej sposobów na kontrolowanie zachowania podpowiedzi, oraz odkryj inne interaktywne obiekty w Dungeon Delve dla inspiracji twórczej.