尋寶活動

*此內容是使用 AI(Beta 測試版)翻譯,可能含有錯誤。若要以英文檢視此頁面,請按一下這裡

尋寶活動的開發者模組給玩家一種天生具有遊戲性的方式來探索您的體驗,有機地將他們介紹給整個空間。玩家進度是持久的,因此獵人行動可以在不同會話期間繼續進行。

模組使用

安裝

要在體驗中使用 尋寶活動 模組:

  1. 視圖標籤開啟工具箱,然後選擇 創作者商店 標籤。

    Toolbox toggle button in Studio
  2. 確保 模型 排序已選擇,然後單擊 查看全部 按鈕以獲得 類別

  3. 找到並點擊 開發模組 磚塊。

  4. 找到 尋寶活動 模組,然後單擊它或拖放到 3D 視檢視中。

  5. 勘探者 窗口中,將整個 尋寶活動 模型移至 服務器腳本服務 。執行體驗時,模組會分配到各種服務並開始運行。

使用代幣

尋寶模組使用 代幣 作為玩家搜索和收集的物品。模組包含一個你可以在 3D 世界中定位的代幣模型。

  1. 在模組主目錄的 工作區 文件夾內尋找 Token1 網格。

  2. Token1 移動到最高級別的 工作區 階層並將其放置在所需位置。

  3. 給代幣一個 獨特名稱 ;這個名稱是模組跟蹤每個玩家收集的代幣的方式。

  4. 若要新增更多代幣,請複製現有代幣並給予獨特名稱。

如果您不想使用包裝的網格代幣,任何 ModelBasePart 都會工作,只要符合以下條件:

  • 對象有 CollectionService 標籤的 ScavengerHuntPart 。如果需要,模組使用的 標籤名稱可以通過在 configureServer 呼叫中設置不同值來變更。

  • 對象包含一個兒子 StringValue 實例設置為"味道文本",當代幣收集時顯示。

    模型
    網格零件

使用區域

區域與代幣略有不同,因為一旦玩家進入它們,就會標記為「已收集」的大面積區域。此外,當玩家離開區域時,味道文字模組自動關閉,區域本身也從工作區移除。

  1. 在區域周圍創建一個錨定的零件,例如方塊或球體。模組將在運行時自動禁用 CanCollide 屬性,因此玩家不會物理地碰撞區域。

  2. 給予它 獨特名稱 。這個名稱是模組跟蹤每個玩家進入的區域的方式。

  3. 使用零件的 標籤 部分或 Studio 的 標籤編輯器 應用標籤 ScavengerHuntPart 到零件,以便 CollectionService 偵測到它。如果需要,模組使用的標籤名稱可以通過在 configureServer 呼叫中設置不同值來變更。

  4. 包含一個兒子 StringValue 實例設置為"口味文本"來顯示當區域輸入時。

配置

模組預先配置以處理大多數使用案例,但可以輕鬆自訂。例如,要變更代幣旋轉速度和自訂模態資訊訊息:

  1. 新手玩家腳本 中,創建一個新的 LocalScript 並將其重命名為 配置尋寶活動

  2. 將以下代碼貼到新腳指令碼中。

    本地腳本 - 配置尋寶活動

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
    ScavengerHunt.configureClient({
    infoModalText = "Welcome to my Scavenger Hunt!",
    completeModalText = "Thanks for playing my Scavenger Hunt!",
    tokenRotationSpeed = 60,
    })

收集事件

每當玩家收集代幣或進入區域時,收集事件發生。您可以從伺服器端聆聽此事件 Script 並依此回應。連接的功能接收了 Player 與代幣碰撞或進入區域的那個代幣或區域名稱。

相同地,當玩家收集所有 代幣 或進入所有 標記區域 時,所有收集 事件發生,連接的函數接收相關的 Player 。此功能每位玩家只能發射一次,可用於獎勵該玩家獲得 徽章、進入新區域、經驗貨幣 等。

腳本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)

自訂GUI

這個模組暴露了多個選項來自定制其預設 GUI,但您可以選擇顯示自訂 GUI 元素。

useCustomModals 設為 trueconfigureClient 函數中,玩家每次啟用代幣追蹤器時,showInfoModal 事件都會發生。相同地,當玩家在尋寶活動中收集了所有內容時,顯示完整模式事件也會發生。這兩個事件都可以在 LocalScript 中聆聽。

本地脚本

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
-- 顯示自訂資訊模式
local infoModal = Players.LocalPlayer.PlayerGui.ScavengerInfoModal
infoModal.Enabled = true
end)
ScavengerHunt.showCompleteModal:Connect(function()
-- 顯示自訂完整模式
local completeModal = Players.LocalPlayer.PlayerGui.ScavengerCompleteModal
completeModal.Enabled = true
end)

GUI可見度

預設情況下,尋寶活動會隱藏所有的 ScreenGuisCoreGuis (除了玩家名單之外),當資訊模式或完成模式出現時。如果您想覆蓋此自動隱藏行為並手動決定哪些使用者介面應保持可見,請包含 hideOtherGuisshowOtherGuis 回呼,並使用自己的自定義邏輯回應。

本地脚本

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
local player = Players.LocalPlayer
local playerGui = player:WaitForChild("PlayerGui")
local hiddenInstances = {}
-- 創建一個不會隱藏的屏幕GUI
local specialGuiInstance = Instance.new("ScreenGui")
-- 在尋寶GUI上方繪製屏幕GUI
specialGuiInstance.DisplayOrder = 1
specialGuiInstance.Parent = playerGui
-- 添加文字標籤到 GUI
local specialLabel = Instance.new("TextLabel")
specialLabel.Size = UDim2.fromScale(1, 0.1)
specialLabel.Text = "Remains visible when displaying modals"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- 隱藏所有開發者定義的屏幕使用者介面
local instances = playerGui:GetChildren()
for _, instance in instances do
if instance:IsA("ScreenGui") and not instance.Name == "ScavengerHunt" and instance.Enabled then
instance.Enabled = false
table.insert(hiddenInstances, instance)
end
end
-- 隱藏特定核心使用者介面
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- 顯示所有隱藏的開發者定義螢幕使用者介面
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- 顯示隱藏的特定核心使用者介面
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

API 參考

功能

配置客戶端

配置客戶端(config: table )

通過以下鑰匙/值在 config 表中覆蓋預設客戶端配置選項。此功能只能從 LocalScript 中呼叫。

關鍵說明預設
autoDismissTime在模式自動關閉前的秒數,或導航到下一頁,如果有一個。設為 0 以停用。20
closeModalGamepad遊戲控制器按鈕用於關閉模型(Enum.KeyCode)。ButtonA
closeModalKeyboard用於關閉模型的鍵盤按鍵(Enum.KeyCode)。E
completeModalText在尋寶活動完成後顯示在模態中的文字,以顯示代幣追蹤器單擊時出現的訊息。「謝謝參與!」
infoModalText單擊代幣追蹤器後顯示的模態上的文字。「找到所有代幣以完成狩獵」
tokenRotationSpeed代幣旋轉的速度,每秒度數。設為 0 以防止旋轉。20
nextArrowImage圖像用於指示現有模態頁之後還有更多模態頁需要顯示。「rbxassetid://8167172095」
openTokenTrackerGamepad遊戲控制器按鈕用於顯示啟用代幣追蹤器後出現的模式(Enum.KeyCode)。ButtonY
openTokenTrackerKeyboard使用鍵盤按鍵顯示啟用代幣追蹤器後出現的模組(Enum.KeyCode)。Y
openTokenTrackerGamepadButtonImage用於啟用代幣追蹤器的遊戲控制器按鈕的圖像。「rbxassetid://8025860488」
regionIcon當進入區域時,顯示在代幣追蹤器旁的圖示。「rbxassetid://8073794624」
tokenIcon在收集代幣時顯示在代幣追蹤器旁的圖示。「rbxassetid://8073794477」
tokenTrackerPositionSmallDevice電話等小型裝置上的代幣追蹤器介面位置(UDim2)。(1, 0, 0, 84)
tokenTrackerPositionLargeDevice在平板電腦和電腦等大型設備上的代幣追蹤器 UI 位置(UDim2)。(1, 0, 1, -16)
useRegions取代 代幣,使用 區域
本地脚本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.configureClient({
infoModalText = "Welcome to my Scavenger Hunt!",
completeModalText = "Thanks for playing my Scavenger Hunt!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

配置伺服器

配置伺服器(config: table)

通過以下鑰匙/值在 config 表中覆蓋預設服務器配置選項,來覆蓋預設服務器配置選項。此功能只能從 Script 中呼叫。

關鍵說明預設
tokenTag標籤由 CollectionService 使用來找到所有在尋寶活動中使用的代幣或區域。「尋寶活動部分」
datastoreName由尋寶活動使用的 DataStore 名稱,用於儲存每個玩家的收集進度。「尋寶代幣」
resetOnPlayerRemoving如果真實,在使用者離開體驗時重設使用者的進度;方便不保存進度進行尋寶測試。
腳本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.configureServer({
tokenTag = "GreenGem",
})

停用

停用()

隱藏尋寶活動的所有用戶介面,切斷所有輸入事件聆聽器,並防止玩家收集代幣或與區域互動。此功能只能從 Script 中呼叫。

腳本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.disable()

啟用

啟用()

顯示尋寶活動的所有用戶介面,連接所有輸入事件聆聽器,並允許玩家收集代幣並與區域互動。此功能只能從 Script 中呼叫。

腳本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.enable()

事件

已收集

當玩家與代幣碰撞或進入區域時,發生火災。連接的功能將收到與代幣碰撞或進入區域的 Player 以及被碰撞的代幣名稱或進入區域的代幣名稱或區域。此事件只能在 Script 中連接。

參數
玩家:Player與代幣碰撞或進入區域的使用者。
項目名稱:string碰撞到的代幣名稱或輸入的區域。
總收集:numberplayer 代表的使用者收集的代幣總數。
腳本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.collected:Connect(function(player, itemName, totalCollected)
print(player.DisplayName, itemName, totalCollected)
end)

全部已收集

當玩家收集所有代幣或進入尋寶活動的所有區域時,發生火災。連接的功能將收到所有收集的代幣的 Player,只能每次發射給每個玩家一次。此事件只能在 Script 中連接。

參數
玩家:Player收集所有代幣或進入所有區域的玩家。
腳本

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " completed the hunt!")
end)

顯示資訊模式

當玩家按一下代幣追蹤器時,配置選項設為真實時,發生火災。此事件只能在 LocalScript 中連接。

本地脚本

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showInfoModal:Connect(function()
local infoModal = Players.LocalPlayer.PlayerGui.InfoModal
infoModal.Enabled = true
end)

顯示完整模式

當玩家按一下代幣追蹤器時,配置選項設置為 ,玩家已收集完所有代幣時,發生火災。此事件只能在 LocalScript 中連接。

本地脚本

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage:WaitForChild("ScavengerHunt"))
ScavengerHunt.showCompleteModal:Connect(function()
local completeModal = Players.LocalPlayer.PlayerGui.CompleteModal
completeModal.Enabled = true
end)

呼叫回來

隱藏其他GUI

隐藏其他GUI(回調:function )

此回呼在模式顯示之前立即執行,讓您在模式顯示之前禁用整個 ScreenGuis 或內部元素,直到模式顯示。請參閱GUI可見度以獲得詳情和樣本代碼。

顯示其他GUI

顯示其他GUI(回調:function)

此回呼會在模式被取消後立即執行,讓您啟用整個 ScreenGuis 或內部元素。請參閱GUI可見度以獲得詳情和樣本代碼。