您可以創建互動式接近提示,當用戶接近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)。 |
| PromptButtonHoldBegan | 當用戶開始與持續時間非零的提示互動時觸發 HoldDuration。 |
| PromptButtonHoldEnded | 當用戶停止與持續時間非零的提示互動時觸發 HoldDuration |
在 Dungeon Delve 專案中,這些事件由 PromptEvents 腳本管理,該腳本位於 ServerScriptService 中。

在腳本內,上述事件簡單地調用 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 中探索其他互動物體以獲取創意靈感。