ProximityPrompt 物件 鼓勵用戶互動,以在接近遊戲中的物體(如門、燈開關和按鈕)時觸發動作。使用此物件,您可以:
- 指示用戶可以在遊戲中互動的物體。
- 顯示用戶可以對物體採取的動作,然後通過用戶輸入(如按下或長按鍵)觸發該動作。
- 顯示所有輸入類型的正確輸入,例如鍵盤、遊戲手柄和觸控螢幕按鍵。
創建接近提示
您必須將接近提示作為父物件附加到您希望用戶互動的部件、模型或附件上。要將接近提示添加到 BasePart、Model 或 Attachment 物件:
在 Explorer 窗口中,將鼠標懸停在 BasePart、Model 或 Attachment 上,然後單擊 ⊕ 按鈕。將顯示上下文菜單。
從菜單中插入 ProximityPrompt。

自定義接近提示
您可以根據希望它的 外觀、希望它何時可見 可見性 以及希望用戶如何 觸發動作 來自定義接近提示。
外觀
接近提示需要傳達三件事:
- 用戶可以互動的 物體。
- 當他們與接近提示互動時觸發的 動作。
- 用戶必須按下或長按的 鍵。
您可以通過以下屬性來指定這些內容:
ObjectText 用戶可以互動的物體的可選名稱。
ActionText 用戶將觸發的動作的可選名稱。
KeyboardKeyCode 用戶必須按下或長按的鍵盤鍵,以觸發該動作。
GamepadKeyCode 用戶必須按下或長按的遊戲手柄鍵,以觸發該動作。

可見性
您可以通過其 MaxActivationDistance、RequiresLineOfSight 和 Exclusivity 屬性來控制接近提示何時可見。
MaxActivationDistance
MaxActivationDistance 屬性允許您定義從 ProximityPrompt 物件周圍激活接近提示可見性的範圍。一旦用戶的角色進入該範圍,接近提示將變得可見。

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)