宝藏猎人

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

剧情猎寻开发者模块 向玩家提供一种内在游戏化的方式来探索您的体验,并在整个场景中有机会进入。玩家的进度是持久的,因此剧情猎寻可以在会话之间持续。

模块使用

安装

要在体验中使用 勘探猎人模块

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

    Toolbox toggle button in Studio
  2. 确保 模型排序 已选择,然后单击 查看所有 按钮为 类别

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

  4. 找到 捉迷藏寻宝 模块,然后单击它,或者将其拖放到 3D 视查看中。

  5. Explorer 窗口中,将整个 ScavengerHunt 模型移到 ServerScriptService 中。 在运行体验时,模块将分配到各个服务并开始运行。

使用代币

捡漏模块使用 代币 作为玩家搜索和收集的物品。模块包括一个代币模型,您可以将其放置在 3D 世界中。

  1. 找到模块主文件夹的 Token1 网格。

  2. Token1 移动到顶级 工作区 层,并将其位置设置为您所需的位置。

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

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

如果您不想使用包含在网格模型代币的束,任何 ModelBasePart 都可以工作,只要它符合以下要求:

  • 对象有一个 CollectionService 标签的 ScavengerHuntPart。如果需要,您可以通过将 CollectionService 标签命名为 1> TokenTag1> 在 4>配置服务器4> 调用中更改使用模块的名称。

  • 对象包含一个子 StringValue 实例,设置为“flavor 文本”显示代币收集后。

    模型
    网格部分

使用区域

区域与代币略有不同,因为大型区域被标记为“已收集”一旦玩家进入它们。 此外,当玩家离开区域时,大型区域的味觉文本模块会自动关闭,区域本身将从工作区移除。

  1. 在区域周围创建锚定的零件,例如方块或球。模块将在运行时自动禁用 CanCollide 属性,以便玩家不会物理与区域相撞。

  2. 给它一个 独特的名称 。 此名称是跟踪每个玩家输入的区域的模块。

  3. 使用零件属性的 标签 部分,或 Studio 的 标签编辑器 ,将标签 ScavengerHuntPart 应用到零件,以便 1> Class.CollectionService1> 检测到它。如果需要,零件名称可以通过设置

  4. 包含一个子 StringValue 实例设置为“口味文本”显示区域。

配置

模块预配置为工作于大多数使用场景,但它可以灵活地自定义。例如,要改变 token 旋转速度和自定义模态信息消息:

  1. StarterPlayerScripts 中,创建一个新的 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,该与代币或进入区域的代币或区域名称。

同样,当玩家收集 所有 代币或进入 所有 标记区域时,所有收集事件触发,并且连接的函数接受该区域的1> Class.Player1>。 此函数只会发生一次每个玩家,它可以用来奖励该玩家一个4>��

脚本

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)

图形用户界面可见度

默认情况下,当信息模态或完成模态出现时, ScreenGuisCoreGuis (除了玩家列表之外) 将隐藏所有 Class.ScreenGui|ScreenGuis 和 1> Class.CoreGui|CoreGuis1>

本地脚本

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()
-- 隐藏所有开发者定义的屏幕 GUIs
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()
-- 显示所有隐藏的开发者屏幕 GUI
for _, instance in hiddenInstances do
instance.Enabled = true
end
hiddenInstances = {}
-- 显示隐藏的核心 GUI
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, true)
end)

API 引用

函数

配置客户

配置客户(配: table )

通过 config 表中的以下键值/值来覆盖客户端端口配置选项。LocalScript 表中的此功能仅从 Class.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位置的 token tracker 用户界面在小型设备上,例如手机 ( 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 使用的标签来查找所有在捉迷藏游戏中使用的代币或区域。“巧妙猎寻部分”
datastoreNameClass.DataStore 的名称,用于猎人寻宝存储每个玩家的收藏进度。“巧妙寻宝令牌”
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()

事件

已收集

玩家与代币碰撞时或进入区域。连接的函数将收到与代币或进入区域相关的Player,该Script中的名称为Class.Player。此事件只能在2>Class.Script2>中连接。

参数
玩家: Player用户 who 与代币撞倒或输入区域。
项目名称: 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 配置选项卡时,会触发。 此事件只能在 Class.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)

显示完整模态

玩家单击 useCustomModals 配置选项卡时,会触发。当 useCustomModals 配置选项卡为 true 时,玩家已经收集了在巧克力猎人中收集的所有代币。 此事件只能在 true 中连接。

本地脚本

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 (回调: function )

此回调在弹出模态之前立即运行,让您在弹出模态之前禁用整个 ScreenGuis 或元素内的元素。请参阅GUI 可见性获取详细信息和示例验证码。

显示其他图形用户界面

显示其他 GUI (回调: function )

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