您可以創建使用者靠近 3D 空間中的物件時出現的互動提示,然後在使用者輸入時啟動動作。
此教學使用 地城深度 項目作為展示。若要跟隨,請在 Studio 中開啟它,然後繼續。
建立提示
畫面提示是由 ProximityPrompt 對象,與 Attachment、BasePart 或 2>Class.Model2> 對象屬性,生成。
選擇 PrisonDoor 模型在 3D 視圖或從 Explorer ( Workspace → PromptObjects → 1> PrisonDoor1> )。
擴展其樹,然後選擇 門 對物件。
將提示放在 Attachment 上,讓您對發生交互點的位置有更多控制,而不是直接放置它在零件/模型上。 插入新的 附件 並將其重命名為 提示附件 。
找到新附件的 位置 屬性,並將其設為 -2.25 、 -0.5 、 1>-1>0.51> 。這會將它移動到門的鑰匙孔前。
將鼠標指针擺動到 提示附件 上,並且插入新的 鄰近提示器プロンプト項目 對物件。
提示外觀
提示由三個主要元素組成,每個元素都可以通過以下屬性來控制:
- 物件文字列 — 可選的名稱,與對話框互動的物件。
- ActionText — 可選的動作名稱顯示給用戶。
- KeyboardKeyCode — 會啟動提示的鍵盤按鍵。
- 遊戲控制器鍵碼 — 遊戲控制器按鈕,會觸發提示。
若要自訂監獄門提示的外觀,請作出以下變更:
在屬性窗口中,找到 對象文字 屬性,然後輸入 門 。
對於 ActionText 屬性,輸入 Pick Lock 。
啟動距離
提示出現在使用者的 角色 移動在指定 MaxActivationDistance 範圍內時。
預設值在大多數情況下都很好運作,但您可以通過將 最大啟動距離 變更為 4 來將用戶互動推進鎖。
持續時間
持續時間 屬性值決定提示的行動是否在秒鐘內啟動。因為這扇門必須被選擇來解鎖它,因此變更 持續時間 屬性值為 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 |
在 地城深淵 項目中,這些事件由 PromptEvents 指令碼在 ServerScriptService 中管理。
內部的脚指令碼,上方的事件只是在 對象操作 ModuleScript 裡,也位於 服務器腳本服務 裡。
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參考頁面以獲得更多控制提示行為的方法,並探索地城浸中的其他互動對象以獲得創意。