剧情猎寻开发者模块 向玩家提供一种内在游戏化的方式来探索您的体验,并在整个场景中有机会进入。玩家的进度是持久的,因此剧情猎寻可以在会话之间持续。
模块使用
安装
要在体验中使用 勘探猎人模块 :
确保 模型排序 已选择,然后单击 查看所有 按钮为 类别 。
找到并单击 开发者模块 地瓦片。
找到 捉迷藏寻宝 模块,然后单击它,或者将其拖放到 3D 视查看中。
在 Explorer 窗口中,将整个 ScavengerHunt 模型移到 ServerScriptService 中。 在运行体验时,模块将分配到各个服务并开始运行。
使用代币
捡漏模块使用 代币 作为玩家搜索和收集的物品。模块包括一个代币模型,您可以将其放置在 3D 世界中。
找到模块主文件夹的 Token1 网格。
将 Token1 移动到顶级 工作区 层,并将其位置设置为您所需的位置。
给 token 一个 独特名称 ;这个名称是模块跟踪每个玩家收集的代币。
要添加更多代币,请复制现有代币并给予它独特的名称。
如果您不想使用包含在网格模型代币的束,任何 Model 或 BasePart 都可以工作,只要它符合以下要求:
对象有一个 CollectionService 标签的 ScavengerHuntPart。如果需要,您可以通过将 CollectionService 标签命名为 1> TokenTag1> 在 4>配置服务器4> 调用中更改使用模块的名称。
对象包含一个子 StringValue 实例,设置为“flavor 文本”显示代币收集后。
使用区域
区域与代币略有不同,因为大型区域被标记为“已收集”一旦玩家进入它们。 此外,当玩家离开区域时,大型区域的味觉文本模块会自动关闭,区域本身将从工作区移除。
在区域周围创建锚定的零件,例如方块或球。模块将在运行时自动禁用 CanCollide 属性,以便玩家不会物理与区域相撞。
给它一个 独特的名称 。 此名称是跟踪每个玩家输入的区域的模块。
包含一个子 StringValue 实例设置为“口味文本”显示区域。
配置
模块预配置为工作于大多数使用场景,但它可以灵活地自定义。例如,要改变 token 旋转速度和自定义模态信息消息:
在 StarterPlayerScripts 中,创建一个新的 LocalScript 并将其重命名为 配置偷拍 。
将以下代码粘贴到新脚本中。
本地脚本 - 配置捡虫猎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)
图形用户界面可见度
默认情况下,当信息模态或完成模态出现时, ScreenGuis 和 CoreGuis (除了玩家列表之外) 将隐藏所有 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 引用
函数
配置客户
通过 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},})
配置服务器
通过 config 表中的以下键值/值来覆盖默认服务器端配置选项。 此功能只能从 Script 中调用。
钥匙 | 描述 | 默认 |
---|---|---|
tokenTag | Class.CollectionService 使用的标签来查找所有在捉迷藏游戏中使用的代币或区域。 | “巧妙猎寻部分” |
datastoreName | Class.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>中连接。
脚本
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)
调用
隐藏其他图形用户界面
此回调在弹出模态之前立即运行,让您在弹出模态之前禁用整个 ScreenGuis 或元素内的元素。请参阅GUI 可见性获取详细信息和示例验证码。
显示其他图形用户界面
此回调在模态被关闭后立即运行,让您启用整个ScreenGuis或在其中的元素。请参阅GUI 可见性获取详细信息和示例验证码。