ProximityPrompt 객체는 사용자가 게임 내 객체(예: 문, 전등 스위치, 버튼)에 접근할 때 작업을 트리거하도록 유도합니다. 이 객체를 사용하여 다음을 수행할 수 있습니다:
- 사용자가 게임에서 상호작용할 수 있는 객체를 표시합니다.
- 사용자가 객체에서 수행할 수 있는 작업을 표시한 후, 키를 누르거나 길게 눌러 작업을 트리거합니다.
- 키보드, 게임패드 및 터치스크린 키와 같은 모든 입력 유형에 대한 올바른 입력을 표시합니다.
근접 프롬프트 만들기
사용자가 상호작용하기를 원하는 파트, 모델 또는 부착물에 근접 프롬프트를 부모로 설정해야 합니다. BasePart, Model 또는 Attachment 객체에 근접 프롬프트를 추가하려면:
Explorer 창에서 BasePart, Model 또는 Attachment 위에 마우스를 올리고 ⊕ 버튼을 클릭합니다. 컨텍스트 메뉴가 표시됩니다.
메뉴에서 ProximityPrompt를 삽입합니다.

근접 프롬프트 사용자 정의
근접 프롬프트는 모양, 가시성 및 작업 트리거에 따라 사용자 정의할 수 있습니다.
모양
근접 프롬프트는 세 가지를 전달해야 합니다:
- 사용자가 상호작용할 수 있는 객체.
- 사용자가 근접 프롬프트와 상호작용할 때 트리거되는 작업.
- 사용자가 눌러야 하거나 길게 눌러야 하는 키.
다음 속성을 통해 이를 지정할 수 있습니다:
ObjectText 사용자가 상호작용할 수 있는 객체의 선택적 이름.
ActionText 사용자가 트리거할 작업의 선택적 이름.
KeyboardKeyCode 사용자가 작업을 트리거하기 위해 눌러야 하는 키보드 키.
GamepadKeyCode 사용자가 작업을 트리거하기 위해 눌러야 하는 게임패드 키.

가시성
근접 프롬프트의 가시성을 제어할 수 있는 속성은 MaxActivationDistance, RequiresLineOfSight, Exclusivity입니다.
MaxActivationDistance
MaxActivationDistance 속성은 근접 프롬프트 객체 주위의 범위를 정의하여 가시성을 활성화합니다. 사용자의 캐릭터가 해당 범위에 들어가면 근접 프롬프트가 표시됩니다.

RequiresLineOfSight
RequiresLineOfSight 속성은 카메라에서 ProximityPrompt 객체까지의 경로가 명확할 때 근접 프롬프트의 가시성을 활성화합니다. 기본적으로 이 속성은 true로 설정되어 있습니다.
Exclusivity
사용자의 캐릭터가 여러 근접 프롬프트의 범위 내에 있을 경우, 각 근접 프롬프트의 가시성은 카메라가 가리키고 있는 근접 프롬프트와 각 근접 프롬프트의 Exclusivity 속성 값에 따라 달라집니다.

상호작용성
사용자가 근접 프롬프트와 상호작용하는 방식을 HoldDuration 및 ClickablePrompt 속성을 통해 사용자 정의할 수 있습니다.
HoldDuration
HoldDuration 속성은 사용자가 키를 누르기 위해 필요한 초 수를 결정합니다. 이 속성의 값이 0이면 근접 프롬프트의 작업이 즉시 트리거됩니다.
ClickablePrompt
ClickablePrompt 속성은 사용자가 근접 프롬프트를 클릭하여 작업을 트리거할 수 있는지 여부를 지정합니다. true로 설정하면 사용자는 근접 프롬프트를 직접 클릭하거나 지정된 키를 눌러 근접 프롬프트와 상호작용할 수 있습니다. false로 설정하면 사용자는 지정된 키를 눌러서만 근접 프롬프트와 상호작용할 수 있습니다.
스크립트 근접 프롬프트
ProximityPrompt 객체 자체 또는 ProximityPromptService를 통해 근접 프롬프트 이벤트에 연결할 수 있습니다. ProximityPromptService를 사용하면 게임 내에서 중복 코드를 방지하면서 모든 근접 프롬프트 동작을 한 곳에서 관리할 수 있습니다.
| 이벤트 | 설명 |
|---|---|
| PromptTriggered | 플레이어가 근접 프롬프트와 상호작용할 때 발생합니다(비제로 HoldDuration를 가진 프롬프트의 지속 시간 이후). |
| PromptTriggerEnded | 플레이어가 근접 프롬프트와의 상호작용을 중단할 때 발생합니다. |
| PromptButtonHoldBegan | 플레이어가 비제로 HoldDuration 값을 가진 근접 프롬프트와 상호작용을 시작할 때 발생합니다. |
| PromptButtonHoldEnded | 플레이어가 비제로 HoldDuration 값을 가진 근접 프롬프트와의 상호작용을 중단할 때 발생합니다. |
| PromptShown | 근접 프롬프트가 표시될 때 LocalScripts에서 발생합니다. |
| PromptHidden | 프롬프트가 숨겨질 때 LocalScripts에서 발생합니다. |
다음 코드 샘플은 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)