体验配置

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

体验配置让您在不重新启动服务器的情况下实时更新游戏内的值:

  • 开启或关闭功能,例如启用或禁用新的引导地下城。
  • 调整游戏内的值,如Boss生命、经验获取或物品价格。
  • 启动定时内容,例如在午夜开始的万圣节活动。

配置的形式是键值对。与其在代码中使用硬编码常量,不如使用键来获取一个值(字符串、数字、布尔值或JSON对象),然后在您希望的任何时间更新该值,而无需发布体验的新版本。所需的代码更改很小:


local ConfigService = game:GetService("ConfigService")
local configSnapshot = ConfigService:GetConfigAsync()
local myValue = configSnapshot:GetValue("my_key_name")

您可以在任何时候拥有最多1000个活动配置,并在创作者中心或Roblox Studio中进行管理。

创作者中心配置页面概览

创建和编辑配置

  1. 在您体验的创作者中心 配置页面上,点击创建配置

  2. 指定一个键、类型、值,并可选地添加描述,以帮助您或您的团队以后识别配置的目的。支持的类型为字符串、数字、布尔值和JSON对象。

  3. 将生成的代码片段复制到您体验中的服务器脚本中,可能位于ServerScriptService中。代码应如下所示:


    local ConfigService = game:GetService("ConfigService")
    local configSnapshot = ConfigService:GetConfigAsync()
    local MY_KEY = "my_key" -- 可选,将配置键存储为常量
    local myValue = configSnapshot:GetValue(MY_KEY)
  4. 像使用其他变量一样使用该值。配置不做任何事情,除非您在代码中使用它们。

有关在脚本中使用配置的更多信息,请参阅将配置添加到您的代码

编辑配置与创建配置没有区别。点击编辑按钮,按需更新值和描述。

限制

配置值按类型有以下限制。

类型最大大小
字符串100,000 字符
数字±1.7976931348623157e+308, ±2^53 的精确整数表示
布尔值不适用
JSON100,000 字符

发布配置

创建配置后,它会移动到待处理状态,以便您在公开可用之前进行测试。待处理更改对于您和您的团队在Studio播放会话中可用,而对正在进行的体验中的玩家不可用。创作者中心的配置页面显示所有活动和待处理的更改。

显示未发布更改的配置页面
  1. 测试完待处理更改后,点击立即发布,在五分钟内发布给所有玩家。如果您希望更长的发布周期,还可以选择在15分钟内发布
  2. (推荐)添加一个描述性发布消息,指示您更新了什么。此消息将显示在历史记录页面上,可以帮助您和您的团队后续识别更改的目的。

在Studio中创建和编辑配置

如果您愿意,可以在Roblox Studio中创建、编辑、待处理和发布配置。点击文件 > 打开配置。Studio界面对于待处理和测试新值特别方便。

用于处理配置的Studio窗口

查看历史记录并恢复配置

配置页面上,点击历史记录以查看过去的更新。每次更新都有更改的时间和日期、谁进行了更改以及发布消息。

带有扩展diff的历史页面,用于配置值

  • 展开每一行以查看键、更改前的值和更改后的值。
  • 使用搜索键框搜索键—不是描述或值,仅搜索键。

历史记录页面还让您将配置恢复到先前状态:

  1. 点击更改旁边的恢复,以待处理“之前”的值。请注意,恢复配置会丢弃任何现有的待处理更改。
  2. 返回到配置页面并发布配置

将配置添加到您的代码

处理配置的主要类是ConfigService,它获取您体验的最新键和值。ConfigService仅在服务器脚本中可用。从客户端脚本调用其方法会导致错误。

处理配置的第一步是检索ConfigSnapshot,这是在当前时间点所有配置的最新值。获取快照有两种方法:

  • ConfigService:GetConfigAsync()用于您希望应用于体验中所有玩家的全局配置:


    local ConfigService = game:GetService("ConfigService")
    local configSnapshot = ConfigService:GetConfigAsync()
    local bossHealth = configSnapshot:GetValue("bossHealth")
  • ConfigService:GetConfigForPlayerAsync()用于实验。它获取针对特定玩家的配置,以便不同的玩家可以获得不同的值。


    local ConfigService = game:GetService("ConfigService")
    local Players = game:GetService("Players")
    local function onPlayerAdded(player)
    local playerConfigSnapshot = ConfigService:GetConfigForPlayerAsync(player)
    local bossHealth = playerConfigSnapshot:GetValue("bossHealth")
    end
    Players.PlayerAdded:Connect(onPlayerAdded)

在任何情况下,如果键不存在,ConfigSnapshot:GetValue()将返回nil。

刷新快照

ConfigSnapshots表示一个时间点,即您请求快照时配置的状态。为了不干扰游戏玩法,配置的更新不会自动传播到快照中。例如,在竞争射击游戏中,您可能希望只在回合之间更改新配置值,以便武器属性不会在比赛中波动。

要手动获取最新值,请使用ConfigSnapshot:Refresh()方法。可选地,连接一个函数到ConfigSnapshot.UpdateAvailable事件,以便自动刷新:


configSnapshot.UpdateAvailable:Connect(function()
configSnapshot:Refresh()
end)

刷新快照后,您可以使用ConfigSnapshot:GetValueChangedSignal()侦听特定键的更改,以便更新您的体验代码:


configSnapshot:GetValueChangedSignal("bossHealth"):Connect(function(newHealthValue)
spawnNewBoss(newHealthValue)
end)

错误处理

在极少数情况下,当配置加载失败且从未加载过时,ConfigService:GetConfigAsync()会抛出错误。

如果ConfigService在之前加载后与Roblox服务器失去连接,ConfigService:GetConfigAsync()会返回一个快照,其中包含最新可用的值。这些快照会尝试重新连接,并在成功加载新更新时触发UpdateAvailable事件。

您如何处理这些不常见的情况取决于您。您可以将调用包装在pcall()中,并在代码中设置后备值,向玩家显示错误并等待快照重新连接,或采取其他解决方案。

测试配置

ConfigService具有内置的方法,用于在Studio和实时服务器中临时测试配置更改,而不会影响整个体验。

要设置本地测试值,可以在服务器脚本或通过开发者控制台中调用ConfigService:SetTestingValue()。对测试值的更改会触发配置更新以及ConfigSnapshot.UpdateAvailable信号。就像生产更新一样,您必须刷新现有快照以获取测试值:


local ConfigService = game:GetService("ConfigService")
ConfigService:SetTestingValue("bossHealth", 200)
local configSnapshot = ConfigService:GetConfigAsync()
local bossHealth = configSnapshot:GetValue("bossHealth") -- 现在是200!

测试更改适用于当前服务器的生命周期,并不会传播到其他服务器。在Studio中,它们适用于当前的播放会话,并且不会影响实时服务器。您可以使用ConfigService:ClearTestingValue()手动清除测试更改。

©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。