尋寶遊戲

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

ScavengerHunt 開發者模組 為玩家提供了一種固有的遊戲化方式以探索你的體驗,自然地將他們引入整個場所。玩家的進度是持久的,因此尋寶遊戲可以跨會話進行。

模組使用

安裝

要在體驗中使用ScavengerHunt模組:

  1. 從Studio的窗口菜單或首頁選項卡工具欄,打開 工具箱 並選擇創作者商店標籤。

  2. 確保選擇了模型排序,然後單擊查看所有按鈕以顯示類別

  3. 找到並單擊圖塊。

  4. 找到尋寶遊戲模組,然後單擊它,或將其拖放到3D視圖中。

  5. 資源管理器窗口中,將整個ScavengerHunt模型移至ReplicatedStorage。在運行體驗時,模組將開始運行。

使用代幣

尋寶遊戲模組使用代幣作為玩家搜尋和收集的物品。該模組附帶一個可以放置在3D世界中的代幣模型。

  1. 在模組主文件夾的工作區文件夾中找到Token1網格。

  2. Token1移至頂層工作區層次結構,並將其放置在所需位置。

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

  4. 若要添加更多代幣,請複製現有代幣並給它一個唯一名稱。

如果你不想使用捆綁的網格代幣,任何ModelBasePart都可以使用,只要它滿足以下標準:

  • 物件具有CollectionService標籤ScavengerHuntPart。如果需要,可以通過在configureServer調用中為tokenTag設置不同的值來更改模組使用的CollectionService標籤名稱。

  • 物件包含一個子StringValue實例,設置為收集代幣時顯示的“風味 文本”。

    模型
    MeshPart

使用區域

區域與代幣有所不同,它們是標記為“已收集”的大區域,當玩家進入時會標記。此外,當玩家離開該區域時,風味文本模態將自動關閉,該區域本身將從工作區中移除。

  1. 在區域周圍創建一個固定的部分,例如區塊或球體。該模組將在運行時自動禁用該區域的CanCollide屬性,以便玩家不會與該區域物理碰撞。

  2. 給它一個唯一名稱。這名稱是模組追蹤每個玩家進入的區域的方式。

  3. 使用該部分屬性的標籤部分,將標籤ScavengerHuntPart應用於該部分,以便CollectionService檢測到它。如果需要,可以通過在configureServer調用中為tokenTag設置不同的值來更改模組使用的標籤名稱。

  4. 包含一個子StringValue實例,設置為進入該區域時顯示的“風味 文本”。

配置

該模組預配置以適用於大多數使用案例,但可以輕鬆自定義。例如,若要更改代幣的旋轉速度並自定義模態信息消息:

  1. StarterPlayerScripts中,創建一個新的LocalScript並將其重命名為ConfigureScavengerHunt

  2. 將以下代碼粘貼到新腳本中。

    LocalScript - ConfigureScavengerHunt

    local ReplicatedStorage = game:GetService("ReplicatedStorage")
    local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
    ScavengerHunt.configureClient({
    infoModalText = "歡迎來到我的尋寶遊戲!",
    completeModalText = "謝謝你參加我的尋寶遊戲!",
    tokenRotationSpeed = 60,
    })

收集事件

每次玩家收集一個代幣或進入一個區域時,collected事件就會觸發。你可以在伺服器端的Script中監聽此事件並作出相應的響應。連接的函數將接收與代幣相撞或進入區域的Player,以及該代幣或區域的名稱。

類似地,當玩家收集所有代幣或進入所有標記的區域時,allCollected事件就會觸發,並且連接的函數將接收相關的Player。該函數每位玩家僅觸發一次,可以用來向該玩家頒發徽章、獲得進入新地區的權限、體驗內幣等。

Script

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.collected:Connect(function(player, itemName)
print(player.DisplayName, itemName)
end)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " 完成了尋寶遊戲!")
end)

自定義GUI

此模組提供了幾個選項以自定義其默認GUI,但你可以選擇顯示自定義GUI元素。

當在configureClient函數中將useCustomModals設置為true時,當玩家啟用代幣跟蹤器時,showInfoModal事件就會觸發。類似地,當玩家在尋寶遊戲中收集了所有代幣時,showCompleteModal事件就會觸發。這兩個事件都可以在LocalScript中進行監聽。

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.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(玩家列表除外)。如果你想覆蓋此自動隱藏行為並以程式的方式決定哪些GUI應保持可見,可以包括hideOtherGuisshowOtherGuis回調,並按照自己的自定義邏輯做出響應。

LocalScript

local Players = game:GetService("Players")
local ReplicatedStorage = game:GetService("ReplicatedStorage")
local StarterGui = game:GetService("StarterGui")
local ScavengerHunt = require(ReplicatedStorage.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 = "顯示模態時保持可見"
specialLabel.Font = Enum.Font.GothamMedium
specialLabel.TextSize = 24
specialLabel.Parent = specialGuiInstance
ScavengerHunt.hideOtherGuis(function()
-- 隱藏所有開發者定義的屏幕GUI
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
-- 隱藏特定核心GUI
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)
end)
ScavengerHunt.showOtherGuis(function()
-- 顯示所有被隱藏的開發者定義的屏幕GUI
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- 顯示所有被隱藏的特定核心GUI
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

API 參考

函數

configureClient

configureClient(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在小型設備(如手機)上代幣跟蹤器UI的位置(UDim2)。(1, 0, 0, 84)
tokenTrackerPositionLargeDevice在大型設備(如平板和電腦)上代幣跟蹤器UI的位置(UDim2)。(1, 0, 1, -16)
useRegions而不是使用代幣,使用區域false
LocalScript

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.configureClient({
infoModalText = "歡迎來到我的尋寶遊戲!",
completeModalText = "謝謝你參加我的尋寶遊戲!",
tokenRotationSpeed = 60,
navigationBeam = {
lightEmission = 1
},
modal = {
textSize = 14
},
})

configureServer

configureServer(config: table)

通過config表中的以下鍵/值覆蓋默認的伺服器端配置選項。這個函數只能從Script中調用。

描述默認
tokenTagCollectionService使用的標籤,以查找在尋寶遊戲中使用的所有代幣或區域。"ScavengerHuntPart"
datastoreNameDataStore的名稱,尋寶遊戲用來存儲每個玩家的收集進度。"ScavengerHuntTokens"
resetOnPlayerRemoving如果設置為true,當玩家離開體驗時重置其進度;這對於在測試尋寶遊戲時不保存進度很方便。false
Script

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

disable

disable()

隱藏所有尋寶遊戲的UI,斷開所有輸入事件監聽器,並禁止玩家收集代幣或與區域互動。這個函數只能從Script中調用。

Script

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

enable

enable()

顯示所有尋寶遊戲的UI,連接所有輸入事件監聽器,並允許玩家收集代幣和與區域互動。這個函數只能從Script中調用。

Script

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

事件

collected

當玩家與代幣相撞或進入一個區域時觸發。連接的函數將接收與代幣相撞或進入區域的Player,以及代幣的名稱或進入的區域名稱。這個事件只能在Script中連接。

參數
player: Player與代幣相撞或進入區域的用戶。
itemName: string 代幣的名稱或進入的區域名稱。
totalCollected: number用戶收集的總代幣數量,由player表示。
Script

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

allCollected

當玩家收集所有代幣或進入尋寶遊戲中的所有區域時觸發。連接的函數將接收收集所有代幣的Player,並且它每位玩家僅觸發一次。這個事件只能在Script中連接。

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

local ReplicatedStorage = game:GetService("ReplicatedStorage")
local ScavengerHunt = require(ReplicatedStorage.ScavengerHunt)
ScavengerHunt.allCollected:Connect(function(player)
print(player.DisplayName .. " 完成了尋寶遊戲!")
end)

showInfoModal

當玩家點擊代幣跟蹤器並且useCustomModals 配置選項設置為true時觸發。這個事件只能在LocalScript中連接。

LocalScript

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

showCompleteModal

當玩家點擊代幣跟蹤器並且useCustomModals 配置選項設置為true並且玩家已在尋寶遊戲中收集所有代幣時觸發。這個事件只能在LocalScript中連接。

LocalScript

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

回調

hideOtherGuis

hideOtherGuis(callback: function)

此回調在顯示模態之前立即運行,讓你在模態顯示之前禁用整個ScreenGuis或其中的元素。詳情和示例代碼請參見GUI可見性

showOtherGuis

showOtherGuis(callback: function)

此回調在模態被關閉後立即運行,讓你啟用整個ScreenGuis或其中的元素。詳情和示例代碼請參見GUI可見性

©2026 Roblox Corporation、Roblox、Roblox 標誌及 Powering Imagination 是我們在美國及其他國家地區的部分註冊與未註冊商標。