사용자가 3D 공간의 객체에 접근할 때 나타나는 인터랙티브 근접 프롬프트를 생성할 수 있으며, 사용자 입력에 따라 동작을 트리거합니다.
이 튜토리얼은 Dungeon Delve 프로젝트를 쇼케이스로 사용합니다. 따라 하려면 진행하기 전에 Studio에서 열어주세요.

프롬프트 생성
화면에 표시되는 프롬프트는 ProximityPrompt 객체가 Attachment, BasePart 또는 Model에 부모로 설정되어 생성됩니다.
3D 뷰 또는 Explorer에서 PrisonDoor 모델을 선택합니다 (Workspace → PromptObjects → PrisonDoor).


트리를 확장하고 Door 객체를 선택합니다.

Attachment에 프롬프트를 배치하면 상호작용 지점을 더 잘 제어할 수 있습니다. 새 Attachment를 삽입하고 이름을 PromptAttachment로 변경합니다.

새 첨부 파일의 Position 속성을 찾아 -2.25, -0.5, -0.5로 설정합니다. 이렇게 하면 문 앞의 열쇠 구멍 앞에 위치하게 됩니다.


PromptAttachment 위에 마우스를 올리고 새 ProximityPrompt 객체를 삽입합니다.

프롬프트 외관
프롬프트는 세 가지 주요 요소로 구성되며, 각 요소는 다음 속성으로 제어할 수 있습니다:

- ObjectText — 상호작용하는 객체의 선택적 이름입니다.
- ActionText — 사용자에게 표시되는 선택적 동작 이름입니다.
- KeyboardKeyCode — 프롬프트를 트리거하는 키보드 키입니다.
- GamepadKeyCode — 프롬프트를 트리거하는 게임패드 버튼입니다.
감옥 문 프롬프트의 외관을 사용자 정의하려면 다음과 같은 변경을 합니다:
Properties 창에서 ObjectText 속성을 찾아 Door를 입력합니다.

ActionText 속성에 Pick Lock를 입력합니다.

활성화 거리
프롬프트는 사용자의 캐릭터가 프롬프트 객체의 부모의 정의된 MaxActivationDistance 범위 내로 이동할 때 나타납니다.

기본 값은 대부분의 경우 잘 작동하지만, MaxActivationDistance를 4로 변경하여 사용자 상호작용을 잠금 장치에 더 가깝게 할 수 있습니다.

유지 시간
HoldDuration 속성 값은 프롬프트의 동작이 트리거되는 속도를 초 단위로 결정합니다. 이 문은 잠금을 해제하기 위해 잠금을 풀어야 하므로 HoldDuration 속성을 4로 변경합니다.

동작 구현
프롬프트 이벤트를 감지하는 가장 좋은 방법은 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)| 이벤트 | 설명 |
|---|---|
| PromptTriggered | 사용자가 프롬프트와 상호작용할 때 발생합니다 (이후 HoldDuration가 0이 아닌 프롬프트의 지속 시간). |
| PromptButtonHoldBegan | 사용자가 0이 아닌 HoldDuration의 프롬프트와 상호작용을 시작할 때 발생합니다. |
| PromptButtonHoldEnded | 사용자가 0이 아닌 HoldDuration의 프롬프트와 상호작용을 중단할 때 발생합니다. |
Dungeon Delve 프로젝트에서는 이러한 이벤트가 ServerScriptService 내의 PromptEvents 스크립트에 의해 관리됩니다.

스크립트 내부에서 위의 이벤트는 단순히 ObjectActions ModuleScript 내의 함수를 호출합니다. 이 모듈도 ServerScriptService에 위치합니다.
local ProximityPromptService = game:GetService("ProximityPromptService")
local ServerScriptService = game:GetService("ServerScriptService")
local ObjectActions = require(ServerScriptService.ObjectActions)
-- 프롬프트가 트리거될 때 감지
local function onPromptTriggered(promptObject, player)
ObjectActions.promptTriggeredActions(promptObject, player)
end
-- 프롬프트 유지가 시작될 때 감지
local function onPromptHoldBegan(promptObject, player)
ObjectActions.promptHoldBeganActions(promptObject, player)
end
-- 프롬프트 유지가 끝날 때 감지
local function onPromptHoldEnded(promptObject, player)
ObjectActions.promptHoldEndedActions(promptObject, player)
end
-- 프롬프트 이벤트를 처리 함수에 연결
ProximityPromptService.PromptTriggered:Connect(onPromptTriggered)
ProximityPromptService.PromptButtonHoldBegan:Connect(onPromptHoldBegan)
ProximityPromptService.PromptButtonHoldEnded:Connect(onPromptHoldEnded)근접 프롬프트는 게임 내 객체 상호작용을 위한 편리하고 사용자 정의 가능한 솔루션입니다. 프롬프트 동작을 제어하는 더 많은 방법을 위해 ProximityPrompt 및 ProximityPromptService 참조 페이지를 확인하고, Dungeon Delve에서 다른 인터랙티브 객체를 탐색하여 창의적인 영감을 얻으세요.