体验配置让您在不重新启动服务器的情况下实时更新游戏内的值:
- 开启或关闭功能,例如启用或禁用新的引导地下城。
- 调整游戏内的值,如Boss生命、经验获取或物品价格。
- 启动定时内容,例如在午夜开始的万圣节活动。
配置的形式是键值对。与其在代码中使用硬编码常量,不如使用键来获取一个值(字符串、数字、布尔值或JSON对象),然后在您希望的任何时间更新该值,而无需发布体验的新版本。所需的代码更改很小:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local myValue = configSnapshot:GetValue("my_key_name")
您可以在任何时候拥有最多1000个活动配置,并在创作者中心或Roblox Studio中进行管理。

创建和编辑配置
在您体验的创作者中心 配置页面上,点击创建配置。
指定一个键、类型、值,并可选地添加描述,以帮助您或您的团队以后识别配置的目的。支持的类型为字符串、数字、布尔值和JSON对象。
将生成的代码片段复制到您体验中的服务器脚本中,可能位于ServerScriptService中。代码应如下所示:
local ConfigService = game:GetService("ConfigService")local configSnapshot = ConfigService:GetConfigAsync()local MY_KEY = "my_key" -- 可选,将配置键存储为常量local myValue = configSnapshot:GetValue(MY_KEY)像使用其他变量一样使用该值。配置不做任何事情,除非您在代码中使用它们。
有关在脚本中使用配置的更多信息,请参阅将配置添加到您的代码。
编辑配置与创建配置没有区别。点击编辑按钮,按需更新值和描述。
限制
配置值按类型有以下限制。
| 类型 | 最大大小 |
|---|---|
| 字符串 | 100,000 字符 |
| 数字 | ±1.7976931348623157e+308, ±2^53 的精确整数表示 |
| 布尔值 | 不适用 |
| JSON | 100,000 字符 |
发布配置
创建配置后,它会移动到待处理状态,以便您在公开可用之前进行测试。待处理更改对于您和您的团队在Studio播放会话中可用,而对正在进行的体验中的玩家不可用。创作者中心的配置页面显示所有活动和待处理的更改。

- 测试完待处理更改后,点击立即发布,在五分钟内发布给所有玩家。如果您希望更长的发布周期,还可以选择在15分钟内发布。
- (推荐)添加一个描述性发布消息,指示您更新了什么。此消息将显示在历史记录页面上,可以帮助您和您的团队后续识别更改的目的。
在Studio中创建和编辑配置
如果您愿意,可以在Roblox Studio中创建、编辑、待处理和发布配置。点击文件 > 打开配置。Studio界面对于待处理和测试新值特别方便。

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

- 展开每一行以查看键、更改前的值和更改后的值。
- 使用搜索键框搜索键—不是描述或值,仅搜索键。
历史记录页面还让您将配置恢复到先前状态:
- 点击更改旁边的恢复,以待处理“之前”的值。请注意,恢复配置会丢弃任何现有的待处理更改。
- 返回到配置页面并发布配置。
将配置添加到您的代码
处理配置的主要类是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")endPlayers.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()手动清除测试更改。