属性と信号

*このコンテンツは、ベータ版のAI(人工知能)を使用して翻訳されており、エラーが含まれている可能性があります。このページを英語で表示するには、 こちら をクリックしてください。

既存の属性

デフォルトのRobloxマッチメイキング構成は、プレイヤーの位置、年齢層、レイテンシなどの既存の属性に基づいた信号を使用します。

Robloxがデフォルト構成に自動的に含めないデータをマッチメイキングに使用するには、カスタム属性カスタム信号を作成する必要があります。

属性タイプ説明
推定プレイヤーレイテンシ数値サーバー内のプレイヤーの推定レイテンシ。
友達がいるカテゴリカルサーバーに参加するプレイヤーと同じIPアドレスを持つ友達または他のプレイヤーがいるかどうか。
ボイスチャットが有効カテゴリカルプレイヤーがボイスチャットを有効にしているかどうか。
プレイヤーの年齢数値プレイヤーの年齢。
プレイヤーデバイスタイプカテゴリカルプレイヤーのデバイスタイプ。モバイルデバイス、コンピュータ、タブレット、コンソール、またはVRデバイスのいずれか。
プレイヤーの言語カテゴリカルプレイヤーの言語。
プレイヤーのプレイ履歴数値過去28日間にプレイヤーがユニバースでプレイした時間のlog-10数。
サーバーの占有率数値サーバー内のプレイヤーの数。
プレイヤーテキストチャットグループカテゴリカルプレイヤーが一緒にテキストチャットできるテキストチャットグループ。

既存の信号

以下は、Roblox属性に基づいて定義された信号です:

信号説明
年齢サーバー内のプレイヤーの平均年齢と参加プレイヤーの年齢の差で、最大関連差は25。
デバイスタイプ参加プレイヤーと同じデバイスタイプを持つサーバー内のプレイヤーの比率。
友達サーバー内で参加プレイヤーと友達であるか、参加プレイヤーと同じIPアドレスを共有する人数。優先プレイヤーがいる場合は1、そうでない場合は0。
レイテンシサーバーに対する参加プレイヤーのデルタピングで、これはプレイヤーが最もアクセス可能なデータセンターで達成できる最低ピングを超える推定ピングで、最大関連値は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}

レイテンシ

参加プレイヤーのデルタピングをミリ秒単位で測定する数値信号で、これはプレイヤーがサーバーでプレイする場合の推定ピングで、プレイヤーが最もアクセス可能なデータセンターで達成できる最低ピングを超えたものです。この信号は最大関連値が100ミリ秒です。信号スコアはデルタピングに反比例し、デルタピングの値が小さいほどスコアが高くなります。

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日間にプレイヤーがユニバースでプレイした時間のlog-10数です。この数値信号は、サーバー内のプレイヤーの平均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 = "Advanced",
Elo = 123.456,
TrainingMode = true
})
end
-- Level属性を取得
local currentLevel, errorMessage = MatchmakingService:GetServerAttribute("Level")
if errorMessage then
warn(errorMessage)
else
print("現在のレベル: " .. currentLevel)
end
-- Level属性値をAdvancedに更新
local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Advanced")
if not success then
warn("サーバー属性[Level]を[Advanced]に更新できませんでした。エラー: " .. errorMessage)
else
print("成功裏に[Level]を[Advanced]に設定しました")
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は、米国並びにその他の国における登録商標および非登録商標です。