排行榜

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

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

排行榜屏幕

排行榜视图

PlayerList 在这些视图中比较分数:

视图排名
这里当前服务器中玩家的会话排名,来自 leaderstats。
好友在玩过该体验的玩家好友中的持久排名。
全球在该体验中玩家的持久排名。

使用 leaderstats 来填充 这里。使用 有序数据存储 来填充 好友 和 全球。

使用 leaderstats 管理会话排行榜

每个玩家的 leaderstats 文件夹驱动 这里 视图。以下步骤设置该文件夹,添加统计信息,在会话期间更新它们,控制它们的顺序,并隐藏 PlayerList。

设置 leaderstats

要设置排行榜并在玩家进入体验时添加玩家:

  1. 在 ServerScriptService 中创建一个新的 Script,并将其命名为 Leaderboard。

    排行榜插入脚本
  2. 在脚本中,将一个函数连接到 PlayerAdded 事件。

    local Players = game:GetService("Players")
    local function leaderboardSetup(player)
    end
    Players.PlayerAdded:Connect(leaderboardSetup)
  3. 在连接的函数内部,创建一个新的 Folder 实例,将其命名为 leaderstats,并将其父级设置为玩家。

    local Players = game:GetService("Players")
    local function leaderboardSetup(player)
    local leaderstats = Instance.new("Folder")
    leaderstats.Name = "leaderstats"
    leaderstats.Parent = player
    end
    Players.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)

这些行完成以下操作:

  1. 创建一个 IntValue 实例。

  2. 将实例的 Name 设置为 "Gold"。这正是统计信息在排行榜上显示的方式。

    排行榜上显示的统计名称 'Gold'
  3. 将统计信息的初始 Value 设置为 0。可以将其设置为您希望的任何值,包括存储在 数据存储 中的值,如果您正在实现 持久排行榜。

  4. 将实例作为子项添加到 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 的子项 BoolValue,并将其值设置为 true,以将该统计信息放在排行榜的第一位。
  • 向统计信息添加一个名为 Priority 的子项 NumberValue,并将其值设置为一个整数。更高的优先级值在排行榜中更早出现。没有优先级的统计信息的默认优先级为 0。

以下代码示例展示了如何向统计信息添加 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 中配置排行榜

在开始之前,请确认您的体验将有效分数写入有序数据存储。

  1. 打开 Creator Hub。
  2. 选择拥有有序数据存储的体验。
  3. 注册包含您的排行榜分数的有序数据存储。
  4. 为体验启用排行榜。
  5. 确认排行榜处于活动状态。
  6. 测试体验内的排行榜,并验证分数是否按预期显示。

停用排行榜会将其隐藏,但不会删除其有序数据存储或分数。

Creator Hub 中体验的排行榜页面,带有配置排行榜的创建按钮。
从 Creator Hub 的排行榜页面创建和管理排行榜配置。

测试好友和全球视图

与已经有分数条目的玩家进行测试。

  1. 作为具有保存分数的玩家加入体验。
  2. 打开体验内的排行榜。
  3. 选择 好友 并确认符合条件的好友以预期分数出现。
  4. 选择 全球 并确认玩家以预期的排名和分数出现。
  5. 通过您现有的服务器端工作流程更新玩家的分数。
  6. 确认排行榜反映更新的值。
体验内的持久排行榜,显示玩家排名、名称和分数。
验证体验内排行榜中的持久排名。

管理分数

继续通过您的有序数据存储工作流程更新、纠正和审核分数。Creator Hub 控制哪个排行榜处于活动状态,但它不会替代您的分数写入或审核逻辑。

通过服务器端验证保护分数写入,并在它们影响玩家排名之前审核可疑或不可能的值。

常见问题

不需要。如果分数已经在兼容的有序数据存储中,请在 Creator Hub 中注册该数据存储。

将您希望显示的分数迁移到有序数据存储中,然后在 Creator Hub 中注册它。

您来管理。有序数据存储保持真实来源,您的服务器端工作流程继续更新和审核分数。

初始测试版支持每个体验一个活动的持久排行榜。

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