Roblox 在 PlayerList 中内置了 排行榜。这里、好友 和 全球 是同一列表的视图:这里 显示当前服务器中玩家的会话排名,而 好友 和 全球 显示您在 Creator Hub 注册的有序数据存储中的持久排名。

排行榜视图
PlayerList 在这些视图中比较分数:
| 视图 | 排名 |
|---|---|
| 这里 | 当前服务器中玩家的会话排名,来自 leaderstats。 |
| 好友 | 在玩过该体验的玩家好友中的持久排名。 |
| 全球 | 在该体验中玩家的持久排名。 |
使用 leaderstats 来填充 这里。使用 有序数据存储 来填充 好友 和 全球。
使用 leaderstats 管理会话排行榜
每个玩家的 leaderstats 文件夹驱动 这里 视图。以下步骤设置该文件夹,添加统计信息,在会话期间更新它们,控制它们的顺序,并隐藏 PlayerList。
设置 leaderstats
要设置排行榜并在玩家进入体验时添加玩家:
在 ServerScriptService 中创建一个新的 Script,并将其命名为 Leaderboard。

在脚本中,将一个函数连接到 PlayerAdded 事件。
local Players = game:GetService("Players")local function leaderboardSetup(player)endPlayers.PlayerAdded:Connect(leaderboardSetup)在连接的函数内部,创建一个新的 Folder 实例,将其命名为 leaderstats,并将其父级设置为玩家。
local Players = game:GetService("Players")local function leaderboardSetup(player)local leaderstats = Instance.new("Folder")leaderstats.Name = "leaderstats"leaderstats.Parent = playerendPlayers.PlayerAdded:Connect(leaderboardSetup)
添加统计信息
排行榜使用 值类型对象 来存储和显示玩家统计信息。此脚本使用 IntValue 显示玩家的金币,这是一个整数的占位符。
在 leaderboardSetup() 函数中,添加第 8 到 11 行:
local Players = game:GetService("Players")
local function leaderboardSetup(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Value = 0
gold.Parent = leaderstats
end
Players.PlayerAdded:Connect(leaderboardSetup)这些行完成以下操作:
创建一个 IntValue 实例。
将实例的 Name 设置为 "Gold"。这正是统计信息在排行榜上显示的方式。

将实例作为子项添加到 leaderstats 文件夹中,这将其添加到排行榜。当玩家进入体验时,他们的名字会出现在排行榜上。

更新统计信息
要更新玩家的排行榜统计信息,请更改该统计信息在其 leaderstats 文件夹中的 Value 属性。例如,您可以将以下 Script 附加到任何拾取对象,以增加收集它的玩家的 Gold 统计信息。
local Players = game:GetService("Players")
local goldChunk = script.Parent
local function onPartTouch(otherPart)
local partParent = otherPart.Parent
local player = Players:GetPlayerFromCharacter(partParent)
local leaderstats = player and player:FindFirstChild("leaderstats")
local goldStat = leaderstats and leaderstats:FindFirstChild("Gold")
if goldStat then
-- 销毁拾取物
goldChunk:Destroy()
-- 更新玩家的排行榜统计信息
goldStat.Value += 10
end
end
goldChunk.Touched:Connect(onPartTouch)排序统计信息
有三种方法可以控制排行榜中统计信息的顺序:
- 按您希望它们出现的顺序添加统计信息。
以下代码示例展示了如何向统计信息添加 IsPrimary 值:
local Players = game:GetService("Players")
local function leaderboardSetup(player)
local leaderstats = Instance.new("Folder")
leaderstats.Name = "leaderstats"
leaderstats.Parent = player
local gold = Instance.new("IntValue")
gold.Name = "Gold"
gold.Value = 0
gold.Parent = leaderstats
local isPrimary = Instance.new("BoolValue")
isPrimary.Name = "IsPrimary"
isPrimary.Value = true
isPrimary.Parent = gold
end
Players.PlayerAdded:Connect(leaderboardSetup)隐藏排行榜
要隐藏排行榜,例如在菜单屏幕或过场动画期间,从客户端脚本调用 SetCoreGuiEnabled()。
local StarterGui = game:GetService("StarterGui")
StarterGui:SetCoreGuiEnabled(Enum.CoreGuiType.PlayerList, false)使用有序数据存储管理持久排行榜
好友 和 全球 从您在 Creator Hub 注册的 有序数据存储 中读取分数。有序数据存储保持真实来源,Roblox 在 PlayerList 中显示配置的分数。这使您可以添加持久的社交和全球排名,而无需构建单独的排行榜界面或排名服务。
初始测试版支持每个体验一个活动的持久排行榜。只有注册的活动排行榜会出现在 好友 和 全球 视图中。
数据要求
在注册排行榜之前,请确认其数据满足以下要求:
- 一个有序数据存储支持排行榜。
- 每个玩家在该有序数据存储中有一个数字分数。
- 每个键通过用户 ID 唯一标识一个玩家,直接或通过包含用户 ID 的一致格式。
- 您的体验将分数更新写入有序数据存储。平台读取分数,但不写入它们。
- 您的分数写入逻辑在服务器上运行。
准备有序数据
选择与您的体验当前存储分数的方式相匹配的路径。
使用现有的有序数据存储
如果您的体验已经在兼容的有序数据存储中存储排行榜分数,请保留该数据存储并在 Creator Hub 中注册它。确认每个条目包含一个数字分数,并且其键一致地标识一个玩家。
您无需重建排行榜数据或将其复制到单独的排名服务中。
创建有序数据存储
如果您还没有排行榜数据,请创建一个有序数据存储并将其添加到现有的服务器端评分流程中。为每个玩家写入一个数字分数,并使用玩家的用户 ID 作为键,或在一致的键格式中包含用户 ID。
local DataStoreService = game:GetService("DataStoreService")
local playerScores = DataStoreService:GetOrderedDataStore("PlayerScores")
local function saveScore(player, score)
local success, errorMessage = pcall(function()
playerScores:SetAsync(tostring(player.UserId), score)
end)
if not success then
warn(errorMessage)
end
end在您在 Creator Hub 中注册数据存储之前,请验证分数是否存在。有关存储和排序持久值的更多信息,请参见 有序数据存储。
从其他后端迁移分数
如果标准数据存储、外部数据库或其他后端存储您的排行榜数据,请将您希望显示的分数迁移到有序数据存储中。为每个玩家保留一个数字分数,并使用一致的键格式标识该玩家。
迁移后,更新您的评分流程,以便新的分数更改继续到达有序数据存储。
在 Creator Hub 中配置排行榜
在开始之前,请确认您的体验将有效分数写入有序数据存储。
- 打开 Creator Hub。
- 选择拥有有序数据存储的体验。
- 注册包含您的排行榜分数的有序数据存储。
- 为体验启用排行榜。
- 确认排行榜处于活动状态。
- 测试体验内的排行榜,并验证分数是否按预期显示。
停用排行榜会将其隐藏,但不会删除其有序数据存储或分数。

测试好友和全球视图
与已经有分数条目的玩家进行测试。
- 作为具有保存分数的玩家加入体验。
- 打开体验内的排行榜。
- 选择 好友 并确认符合条件的好友以预期分数出现。
- 选择 全球 并确认玩家以预期的排名和分数出现。
- 通过您现有的服务器端工作流程更新玩家的分数。
- 确认排行榜反映更新的值。

管理分数
继续通过您的有序数据存储工作流程更新、纠正和审核分数。Creator Hub 控制哪个排行榜处于活动状态,但它不会替代您的分数写入或审核逻辑。
通过服务器端验证保护分数写入,并在它们影响玩家排名之前审核可疑或不可能的值。
常见问题
不需要。如果分数已经在兼容的有序数据存储中,请在 Creator Hub 中注册该数据存储。
将您希望显示的分数迁移到有序数据存储中,然后在 Creator Hub 中注册它。
您来管理。有序数据存储保持真实来源,您的服务器端工作流程继续更新和审核分数。
初始测试版支持每个体验一个活动的持久排行榜。