属性和信号

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

现有属性

默认的 Roblox 匹配配置使用基于现有属性的信号,如玩家位置、年龄段和延迟。

要使用 Roblox 在默认配置中没有自动包含的匹配数据,你需要创建 自定义属性自定义信号

属性类型描述
估计玩家延迟数值服务器中玩家的估计延迟。
有朋友类别服务器中是否有朋友或与加入玩家拥有相同 IP 地址的其他玩家。
是否启用语音聊天类别玩家是否启用了语音聊天。
玩家年龄数值玩家的年龄。
玩家设备类型类别玩家的设备类型。可以是移动设备、电脑、平板电脑、游戏主机或 VR 设备。
玩家语言类别玩家的语言。
玩家游戏历史数值玩家在过去 28 天内在某个宇宙中游戏的对数 (log-10) 分钟数。
服务器占用率数值服务器中的玩家数量。
玩家文本聊天组类别玩家的文本聊天组,在这里他们可以一起进行文本聊天。

现有信号

以下是基于 Roblox 属性派生的 Roblox 定义信号:

信号描述
年龄服务器中玩家的平均年龄与加入玩家的年龄之间的差异,最大相关差异为 25。
设备类型服务器中与加入玩家相同设备类型的玩家比例。
朋友与加入玩家是朋友的玩家人数或与加入玩家共享 IP 地址的玩家人数。若存在优先玩家,则为 1,否则为 0。
延迟服务器的估计玩家延迟,最大相关值为 250。
语言服务器中与加入玩家相同语言的玩家比例。
占用率服务器中玩家与服务器容量的比例。
游戏历史服务器中玩家的平均游戏历史与加入玩家游戏历史之间的差异,最大相关差异为 4.6。
语音聊天服务器中启用语音聊天的玩家比例。
文本聊天服务器中可以与加入玩家共同进行文本聊天的玩家比例。

年龄

一个数值信号,比较服务器中玩家的平均年龄与加入玩家的年龄。该信号的最大相关差异为 25。信号分数与年龄差异成反比,即较小的年龄差异具有更高的分数。

ageDifferenceSignalScore=1min(25,ageDifference)/25\text{ageDifferenceSignalScore} = 1 - \min(25, \text{ageDifference}) / 25

其中

ageDifference=avgServerAgejoiningPlayerAge\text{ageDifference} = |\text{avgServerAge} - \text{joiningPlayerAge}|

设备类型

一个类别信号,测量服务器中与加入玩家相同设备类型的玩家的比例。设备类型包括:电脑、移动设备、平板、游戏主机和 VR 设备。

deviceTypeSignalScore=# players with same device as joining player/# players on the server\text{deviceTypeSignalScore} = \text{\# players with same device as joining player} / \text{\# players on the server}

朋友

优先玩家是与加入玩家是朋友的玩家或与加入玩家共享相同 IP 地址的玩家。朋友信号是一个类别信号,当服务器中存在优先玩家时得分为 1,当服务器中没有优先玩家时得分为 0。

friendsSignalScore=hasFriends ? 1:0\text{friendsSignalScore} = \text{hasFriends} \ {?} \ 1 : 0

朋友信号也可以视为一个数值信号,最大相关值为 1。

friendsSignalScore=min(# preferred players in server,1)/1\text{friendsSignalScore} = \min(\text{\# preferred players in server}, 1) / 1

语言

一个类别信号,测量服务器中与加入玩家相同语言设置的玩家的比例。

languageSignalScore=# players with same language setting as joining player/# players on the server\text{languageSignalScore} = \text{\# players with same language setting as joining player} / \text{\# players on the server}

延迟

一个数值信号,测量加入玩家在服务器上游戏时的估计延迟时间(以毫秒为单位)。该信号的最大相关值为 250 毫秒。信号分数与延迟成反比,即较小的延迟值具有更高的分数。

latencySignalScore=1min(250,estimatedPingMs)/250\text{latencySignalScore} = 1 - \min(250, \text{estimatedPingMs}) / 250

占用率

一个数值信号,测量服务器中玩家数量与服务器容量的比例。

occupancySignalScore=# players in server/serverCapacity\text{occupancySignalScore} = \text{\# players in server} / \text{serverCapacity}

游戏历史

游戏历史属性值是玩家在过去 28 天内在某个宇宙中游戏的对数 (log-10) 分钟数。这个数值信号比较服务器中玩家的平均对数游戏历史值与加入玩家的游戏历史值。该信号的最大相关差异为 4.6。信号分数与游戏历史差异成反比,即较小的游戏历史差异具有更高的分数。

playHistorySignalScore=1min(4.6,playHistoryDifference/4.6)\text{playHistorySignalScore} = 1 - \min(4.6, \text{playHistoryDifference} / 4.6),其中

playHistoryDifference=avgServerPlayHistoryjoiningPlayerPlayHistory\text{playHistoryDifference} = |\text{avgServerPlayHistory} - \text{joiningPlayerPlayHistory}|

语音聊天

玩家可以启用或禁用语音聊天。语音聊天信号是一个类别信号,测量与加入玩家相同语音聊天设置的玩家与服务器中玩家的比例。

如果某个地方的语音聊天被禁用,则语音聊天信号的权重为 0。

voiceChatSignalScore=# players with same voice chat setting as joining player/# players on the server\text{voiceChatSignalScore} = \text{\# players with same voice chat setting as joining player} / \text{\# players on the server}

文本聊天

一个类别信号,测量与加入玩家共同可以进行文本聊天的服务器中玩家的比例。

textChatSignalScore=# players can text with the joining player in common /# players on the server\text{textChatSignalScore} = \text{\# players can text with the joining player in common } / \text{\# players on the server}

自定义属性

自定义属性为自定义信号提供对玩家和服务器数据的访问。有关创建自定义属性的更多信息,请参见 创建自定义属性。有关现有 Roblox 属性的更多信息,请参见 现有属性

属性特性
玩家持久

在数据存储中持久存在的自定义玩家数据,例如玩家在游戏中的等级或分数

使用 DataStore API 管理
服务器非持久,并且仅在服务器处于活动状态时存在

服务器特定的数据,例如服务器等级或游戏模式

使用 MatchmakingService API 管理
玩家属性示例

local DataStoreService = game:GetService("DataStoreService")
local eloStore = DataStoreService:GetDataStore("PlayerElo")
function onMatchEnded(players: {Player}, winners: {Player}, losers: {Player})
for _, player in players do
local updatedElo = CalculateUpdatedElo(player, winners, losers)
local success, errorMessage = pcall(function()
eloStore:SetAsync(player.UserId, updatedElo)
end)
end
end
服务器属性示例

local MatchmakingService = game:GetService("MatchmakingService")
local RunService = game:GetService("RunService")
if RunService:IsStudio() then
-- 为测试设置初始属性和架构
MatchmakingService:InitializeServerAttributesForStudio({
Level = "高级",
Elo = 123.456,
TrainingMode = true
})
end
-- 检索等级属性
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("当前等级: " .. currentLevel)
end
-- 将等级属性值更新为高级
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "高级")
if not success then
warn("无法将服务器属性 [Level] 更新为 [高级],错误: " .. errorMessage)
else
print("成功将 [Level] 设置为 [高级]")
end

自定义信号

自定义信号由你创建和定义,可以是数值或类别:

  • 数值信号是数字。它们比较加入玩家属性与服务器的聚合值之间的差异,差异越大,分数越低或越高。例如,玩家的技能水平越靠近服务器的平均技能水平,数值信号的分数就越高。然后将该分数乘以信号的权重。
  • 类别信号是字符串或布尔值。它们基于加入玩家属性与服务器中其他玩家的比较常见程度。例如,如果服务器中大多数玩家与加入玩家具有相同的偏好语言,则分数增加。这个分数也会乘以信号的权重。

有关创建自定义信号的更多信息,请参见 创建自定义信号。有关现有 Roblox 信号的更多信息,请参见 现有信号

玩家数值

加入玩家

最小化服务器平均玩家属性与加入玩家属性之间的差异。差异超过 1000 返回信号分数为 0。

玩家数值信号的加入玩家公式

local diff = math.abs(server_{aggregation_function}_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return score
玩家数值信号的加入玩家示例

local server_average_Elo = 2000
local joining_player_Elo = 1000
local max_relevant_difference = 1500
local diff = math.abs(server_average_Elo - joining_player_Elo)
local score = 1 - math.min(diff / max_relevant_difference, 1)
return score
常量值

最小化服务器平均玩家属性与常量值 500 之间的差异。差异超过 1000 返回信号分数为 0。

玩家数值信号的常量值公式

local diff = math.abs(server_sum_{attribute_name} + joining_player_{attribute_name} - constant_value)
local score = 1 - math.min(diff / max_relevant_difference, 1)
return score
玩家数值信号的常量值示例

local server_sum_PowerLevel = 4500
local joining_player_PowerLevel = 9901
local max_relevant_difference = 1500
local constant_value = 5000
local diff = math.abs(server_sum_PowerLevel + joining_player_PowerLevel - constant_value)
local score = 1 - math.min(diff / max_relevant_difference, 1)

玩家类别

聚类

最大化服务器中与加入玩家属性相同的玩家的比例。

玩家类别信号的聚类公式

local score = num_players_same_{attribute_name} / occupancy
return score
玩家类别信号的聚类示例

local num_players_same_Guild = 15
local occupancy = 19
local score = num_players_same_Guild / occupancy
return score
多样化

最大化服务器中与加入玩家属性不同的玩家的比例。

玩家类别信号的多样化公式

local score = num_players_same_{attribute_name} / occupancy
return 1 - score
玩家类别信号的多样化示例

local num_players_same_RpgClass = 15
local occupancy = 19
local score = num_players_same_RpgClass / occupancy
return score

服务器数值

加入玩家

最小化服务器属性与加入玩家属性之间的差异。差异超过 1000 返回信号分数为 0。

服务器数值信号的加入玩家公式

local diff = math.abs(server_{attribute_name} - joining_player_{attribute_name})
local score = 1 - math.min(diff / max_relevant_difference, 1)
return score
服务器数值信号的加入玩家示例

local server_Level = 4500
local joining_player_Level = 9000
local max_relevant_difference = 1500
local diff = math.abs(server_Level - joining_player_Level)
local score = 1 - math.min(diff / max_relevant_difference, 1)
常量值

最小化服务器属性值与常量值之间的差异。超过该常量值的差异返回信号分数为 0。

服务器数值信号的常量值公式

local diff = math.abs(server_{attribute_name} - constant_value)
local score = math.min(diff / max_relevant_difference, 1)
return score
服务器数值信号的常量值示例

local server_GameTime = 500
local max_relevant_difference = 1000
local constant_value = 1000
local diff = math.abs(server_GameTime - constant_value)
local score = math.min(diff / max_relevant_difference, 1)

服务器类别

与加入玩家比较

当服务器的属性值(例如,游戏模式)与玩家的属性值(例如,首选游戏模式)相等时,分数为 1。否则,信号分数为 0。

服务器类别信号的加入玩家公式

if server_{attribute_name} == joining_player_{attribute_name} then
return 1
else
return 0
end
服务器类别信号的加入玩家示例

local server_GameMode = "生存"
local joining_player_GameMode = "生存"
if server_GameMode == joining_player_GameMode then
return 1
else
return 0
end
与常量值比较

当服务器的属性值等于常量值 true 时,分数为 1。否则,信号分数为 0。

服务器类别信号的常量值公式

if server_{attribute_name} == constant_value then
return 1
else
return 0
end
服务器类别信号的常量值示例

local server_GameNotStarted = true
if server_GameNotStarted == true then
return 1
else
return 0
end
©2026 Roblox Corporation、Roblox、Roblox 标志及 Powering Imagination 是我们在美国及其他国家或地区的注册与未注册商标。