屬性和信號

*此內容是使用 AI(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
-- 獲取 Level 屬性
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("當前等級: " .. currentLevel)
end
-- 將 Level 屬性值更新為進階
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 是我們在美國及其他國家地區的部分註冊與未註冊商標。