属性和信号

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

现有属性

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

要使用 Roblox 默认配置中未自动包含的数据进行匹配,您需要创建 自定义属性自定义信号

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

现有信号

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

信号描述
年龄服务器中玩家的平均年龄与加入玩家的年龄之间的差异,最大相关差异为 25。
设备类型服务器中与加入玩家相同设备类型的玩家比例。
朋友服务器中与加入玩家是朋友或与加入玩家共享 IP 地址的人数。如果有首选玩家,则为 1,否则为 0。
延迟加入玩家在服务器上的 delta ping,即玩家在其最佳可达数据中心上可以达到的最低 ping 之上的估计 ping,最大相关值为 100。
语言服务器中与加入玩家相同语言的玩家比例。
占用率服务器中玩家与服务器容量的比例。
游戏历史服务器中平均游戏历史与加入玩家的游戏历史之间的差异,最大相关差异为 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}

延迟

一个数值信号,测量加入玩家在服务器上游戏时的 delta ping(以毫秒为单位),即玩家在其最佳可达数据中心上可以达到的最低 ping 之上的估计 ping。该信号的最大相关值为 100 毫秒。信号分数与 delta ping 成反比,意味着较低的 delta ping 值具有更高的分数。

latencySignalScore=1min(100,deltaPingMs)/100\text{latencySignalScore} = 1 - \min(100, \text{deltaPingMs}) / 100

占用率

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

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

游戏历史

游戏历史属性值是玩家在过去 28 天内在一个宇宙中玩的分钟数的以 10 为底的对数。该数值信号比较服务器中玩家的平均以 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 是我们在美国及其他国家或地区的注册与未注册商标。