尋寶活動

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

迷你尋寶開發模組 為玩家提供一個內在的遊戲化方式來探索您的體驗,並且在整個空間中有機會出現。玩家進度是持續的,因此迷你尋寶可以在會話中繼續。

模組使用

安裝

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

  1. 檢視 標籤開啟 工具箱 並選擇 創作者商店 標籤。

    Toolbox toggle button in Studio
  2. 確認 模型排序 已選擇,然後按一下 查看全部 按鈕 for 類別

  3. 找到並點擊 Dev Modules 磚塊。

  4. 找到 尋寶活動 模組並點擊它,或將它拖曳到 3D 檢視窗中。

  5. Explorer 窗口中,將整個 ScavengerHunt 模型移動到 ServerScriptService 中。執行體驗時,模組將分配到各個服務並開始執行。

使用代幣

尋寶模組使用 代幣 作為玩家搜尋並收集的項目。模組包含一個代幣模型,您可以將它放置在 3D 世界中。

  1. 找到模組主頁面的 Token1 網格內的 Token1 網格。

  2. Token1 移動到最上層的 工作區 階層,並將它放置在所需位置。

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

  4. 要新增更多代幣,請複製現有代幣並且給它一個獨特的名稱。

如果您不想使用組合式網格代幣,任何 ModelBasePart 都可以運行,只要它符合以下條件:

  • 對象有一個 CollectionService 標籤的 ScavengerHuntPart 。如果需要,您可以通過設置 CollectionService 標籤名稱,以便模組使用 1> TokenTag1> 來變更。在 4> 配置伺服器4> 時,您可以設置 7> Class.CollectionService7>

  • 對象包含一個子 StringValue instance 設置在 "flavor 文字" 顯示當代幣收集時。

    模型
    網格零件

使用區域

區域與代幣稍微不同,因為大型區域標為 "已收集" 一旦玩家進入它們。此外,當玩家離開區域時,味道文字模組會自動關閉,並且區域本身會從工作區移除。

  1. 在區域周圍建立錨定的零件,例如方塊或球體。模組將在執行時自動禁用 CanCollide 屬性,以便玩家不會在物理上與區域碰撞。

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

  3. 使用 標籤 區域的零件的屬性區,或 Studio 的 標籤編輯器 ,將標籤 ScavengerHuntPart 適用到零件,讓 1> Class.CollectionService1> 偵測到它。如

  4. 包含一個子 StringValue 例設定在「風味文字」顯示區域,當區域輸入時顯示。

設定

模組預設為工作於大多數使用案例,但模組可以輕鬆自訂。例如,要變更代幣旋轉速度並自訂模組訊息:

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

  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 ,該與代幣或區域名稱碰撞。

同樣地,當玩家收集 所有 代幣或進入 所有 標記區域時, 所有收集 事件會發動,並且連接的函數接收該區域的相關 1> Class.Player1> 。此功能只會對每個玩家發生一次,並且

腳本

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 設為 true設定客戶端 功能中時, 1> showInfoModal1> 事件會每次玩家啟動代幣跟蹤器時發生。同樣地, 4> showCompleteModal4> 事件會在玩

本地指令碼

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 (除了玩家列表外) 當資訊模式或完成模式出現時,當信息模式或完成模式出現時,隐藏其他Guis

本地指令碼

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 參考

功能

設定Client

設定Client(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而不是 代幣 ,使用 區域
本地指令碼

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
},
})

設定伺服器

設定伺服器(設定: table )

config 表中的鍵值/值中,以下是預設伺服器端的設定選項。此功能只能從 Script 中呼叫。

鑰匙說明預設
tokenTagClass.CollectionService 使用此標籤來尋找尋寶活動中使用的所有代幣或區域。「捕蟲獵人」
datastoreName用於尋寶活動儲存每個玩家的收藏進度的 DataStore「採集者獵人Tokens」
resetOnPlayerRemoving如果是,則會在使用者離開體驗時重設使用者的進度;有助於不會儲存進度,而測試尋寶活動。
腳本

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

停用

停用()

隱藏所有尋寶獵人的 UI,連接所有輸入事件聽取器,並防止玩家收集代幣或與區域交互。此功能只能從 Script 中呼叫。

腳本

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

啟用

啟用()

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

腳本

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

事件

已收集

玩家與代幣碰撞時或進入區域時發生。連接的函數將收到與代幣碰撞或進入區域和代幣名稱那個區域和進入區域所對應的區域。此事件只能在 Class.Script 中連接。

參數
玩家: Player撞擊代幣或進入區域的玩家。
項目名稱:string衝突的代幣名稱或區域。
總計收集: number用戶代表 player 收集的總代幣數。
腳本

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)

顯示資訊模組

發生玩家點擊「useCustomModals」代幣追蹤器時,useCustomModals class.localScript 選項設置為「LocalScript」。此事件只能在 2>Class.LocalScript2> 中連接。

本地指令碼

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)

顯示完整模式

發生玩家點擊「useCustomModals」代幣追蹤器時,useCustomModals配置 選項設置為 true ,玩家在尋寶活動中收集了所有代幣。此事件只能連接在 2>Class.LocalScript2> 中。

本地指令碼

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)

回調

隱藏其他導覽

hideOtherGuis(回歸函數: function )

此回彈即將在模式展示之前立即執行,讓您在模式展示之前停用整個 ScreenGuis 或元素內的元素。參閱 GUI 可視性 了解詳情和範例代碼。

顯示其他GUI

顯示其他 Guis (回調: function )

此回調在模組被關閉後立即執行,讓您可以啟用整個 ScreenGuis 或在它們內部的元素。參閱 GUI 可視性 了解詳情和範例代碼。