垃圾寻宝

*此内容使用人工智能(Beta)翻译,可能包含错误。若要查看英文页面,请点按 此处

垃圾收集者 开发者模块 给玩家一个内在游戏化的方式来探索您的体验,通过整个场景方介绍他们。玩家进度是持续的,因此猎寻宝活动可以在不同会话期间继续。

模块使用

安装

要在体验中使用 垃圾收集者 模块:

  1. 视图选项卡打开工具箱并选择 创建者商店 选项卡。

    Toolbox toggle button in Studio
  2. 确保 模型 排序已选择,然后单击 查看全部 按钮以获取 类别

  3. 找到并单击 开发模块 瓦片。

  4. 找到 垃圾捡漏 模块并单击它,或拖放到 3D 视查看中。

  5. Explorer 窗口中,将整个 垃圾收集者猎杀 模型移至 ServerScriptService 。在运行体验时,模块将分配到各种服务并开始运行。

使用代币

垃圾搜索模块使用 代币 作为玩家搜索和收集的物品。模块带有一个你可以在 3D 世界中放置的代币模型。

  1. 找到模块主文件夹内的 Token1 网格内的 工作区 文件夹。

  2. Token1 移至顶层 工作区 架构并将其放置在所需位置

  3. 给代币一个 独特名称 ;这个名称是模块跟踪每个玩家收集的哪些代币的方式。

  4. 要添加更多代币,复制现有代币并给予其独特名称。

如果你不想使用包装的网格代币,任何 ModelBasePart 都会工作,只要它符合以下条件:

  • 对象有一个 CollectionService 标签的 ScavengerHuntPart .如果需要,模块使用的 标签名可以通过在 配置服务器 调用中设置不同值来更改。

  • 对象包含一个子实例,设置为“味道文本”显示,当代币收集时显示。

    模型
    网格部分

使用区域

区域与代币略有不同,因为一旦玩家进入它们,就会标记为“已收集”的大面积区域。此外,当玩家离开区域时,味道文本模态自动关闭,区域本身也从工作区中删除。

  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 ,该代币或区域的名称。

同样,当玩家收集所有代币或进入所有标记区域时,所有收集事件触发,连接的函数收到相关的》。此函数仅每次发射给玩家一次,可用于奖励该玩家获得徽章、进入新区域、经验货币等。

脚本

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)

图形用户界面可见性

默认情况下,垃圾搜索将隐藏所有的 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 = {}
-- 创建一个不会被隐藏的屏幕图形用户界面
local specialGuiInstance = Instance.new("ScreenGui")
-- 绘制上方的扫盲猎 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电话等小型设备上的代币跟踪器 UI 位置(UDim2)。(1, 0, 0, 84)
tokenTrackerPositionLargeDevice关于平板电脑和 PC 等更大设备的 token 跟踪器 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 中调用。

关键描述默认
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碰撞到的代币名称或输入的区域。
总收集: 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)

显示信息模态

当玩家单击代币跟踪器时,配置选项设置为真时发生火灾。此事件只能在 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)

回调

隐藏其他用户界面

隐藏其他图形用回调界面(callback: function )

此回调在显示模态之前立即运行,让你在模态显示之前禁用整个ScreenGuis或模态内的元素。请参阅图形用户界面可见性获取详细信息和示例代验证码。

显示其他图形界面

显示其他图形用户界面(回调: function )

此回调在模态被取消后立即运行,让你启用整个ScreenGuis或其中的元素。请参阅图形用户界面可见性获取详细信息和示例验证码。