既存の属性
デフォルトのRobloxマッチメイキング構成は、プレイヤーの位置、年齢層、レイテンシなどの既存の属性に基づいた信号を使用します。
Robloxがデフォルト構成に自動的に含めないデータをマッチメイキングに使用するには、カスタム属性とカスタム信号を作成する必要があります。
| 属性 | タイプ | 説明 |
|---|---|---|
| 推定プレイヤーレイテンシ | 数値 | サーバー内のプレイヤーの推定レイテンシ。 |
| 友達がいる | カテゴリカル | サーバーに参加するプレイヤーと同じIPアドレスを持つ友達または他のプレイヤーがいるかどうか。 |
| ボイスチャットが有効 | カテゴリカル | プレイヤーがボイスチャットを有効にしているかどうか。 |
| プレイヤーの年齢 | 数値 | プレイヤーの年齢。 |
| プレイヤーデバイスタイプ | カテゴリカル | プレイヤーのデバイスタイプ。モバイルデバイス、コンピュータ、タブレット、コンソール、またはVRデバイスのいずれか。 |
| プレイヤーの言語 | カテゴリカル | プレイヤーの言語。 |
| プレイヤーのプレイ履歴 | 数値 | 過去28日間にプレイヤーがユニバースでプレイした時間のlog-10数。 |
| サーバーの占有率 | 数値 | サーバー内のプレイヤーの数。 |
| プレイヤーテキストチャットグループ | カテゴリカル | プレイヤーが一緒にテキストチャットできるテキストチャットグループ。 |
既存の信号
以下は、Roblox属性に基づいて定義された信号です:
| 信号 | 説明 |
|---|---|
| 年齢 | サーバー内のプレイヤーの平均年齢と参加プレイヤーの年齢の差で、最大関連差は25。 |
| デバイスタイプ | 参加プレイヤーと同じデバイスタイプを持つサーバー内のプレイヤーの比率。 |
| 友達 | サーバー内で参加プレイヤーと友達であるか、参加プレイヤーと同じIPアドレスを共有する人数。優先プレイヤーがいる場合は1、そうでない場合は0。 |
| レイテンシ | サーバーに対する参加プレイヤーのデルタピングで、これはプレイヤーが最もアクセス可能なデータセンターで達成できる最低ピングを超える推定ピングで、最大関連値は100。 |
| 言語 | 参加プレイヤーと同じ言語を持つサーバー内のプレイヤーの比率。 |
| 占有率 | サーバー内のプレイヤーの比率とサーバーの容量。 |
| プレイ履歴 | サーバー内の平均プレイ履歴と参加プレイヤーのプレイ履歴の差で、最大関連差は4.6。 |
| ボイスチャット | ボイスチャットが有効なサーバー内のプレイヤーの比率。 |
| テキストチャット | 参加プレイヤーと一緒にテキストチャットできるサーバー内のプレイヤーの比率。 |
年齢
サーバー内のプレイヤーの平均年齢と参加プレイヤーの年齢を比較する数値信号。この信号は最大関連差が25です。信号スコアは年齢差に反比例し、年齢差が小さいほどスコアが高くなります。
ここで
デバイスタイプ
参加プレイヤーと同じデバイスタイプを持つサーバー内のプレイヤーの比率を測定するカテゴリカル信号。デバイスタイプには、コンピュータ、モバイルデバイス、タブレット、コンソール、VRデバイスが含まれます。
友達
優先プレイヤーは、参加プレイヤーと友達であるか、参加プレイヤーと同じIPアドレスを共有するプレイヤーです。友達信号は、サーバーに優先プレイヤーがいる場合はスコアが1、いない場合はスコアが0のカテゴリカル信号です。
友達信号は、最大関連値が1の数値信号とも見なすことができます。
言語
参加プレイヤーと同じ言語設定を持つサーバー内のプレイヤーの比率を測定するカテゴリカル信号。
レイテンシ
参加プレイヤーのデルタピングをミリ秒単位で測定する数値信号で、これはプレイヤーがサーバーでプレイする場合の推定ピングで、プレイヤーが最もアクセス可能なデータセンターで達成できる最低ピングを超えたものです。この信号は最大関連値が100ミリ秒です。信号スコアはデルタピングに反比例し、デルタピングの値が小さいほどスコアが高くなります。
占有率
サーバー内のプレイヤーの比率とサーバーの容量を測定する数値信号。
プレイ履歴
プレイ履歴属性値は、過去28日間にプレイヤーがユニバースでプレイした時間のlog-10数です。この数値信号は、サーバー内のプレイヤーの平均log-10プレイ履歴値と参加プレイヤーのプレイ履歴値を比較します。この信号は最大関連差が4.6です。信号スコアはプレイ履歴の差に反比例し、プレイ履歴の差が小さいほどスコアが高くなります。
, ここで
ボイスチャット
プレイヤーはボイスチャットを有効または無効にできます。ボイスチャット信号は、参加プレイヤーと同じボイスチャット設定を持つプレイヤーの比率をサーバー内のプレイヤー数で測定するカテゴリカル信号です。
場所にボイスチャットが無効になっている場合、ボイスチャット信号の重みは0です。
テキストチャット
参加プレイヤーと一緒にテキストチャットできるサーバー内のプレイヤーの比率を測定するカテゴリカル信号です。
カスタム属性
カスタム属性は、カスタム信号がプレイヤーとサーバーデータにアクセスできるようにします。独自のカスタム属性を作成する方法の詳細については、カスタム属性を作成するを参照してください。既存の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
endlocal 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 scorelocal 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 scorelocal 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 scorelocal 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 - scorelocal 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 scorelocal 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 scorelocal 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
endlocal 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
endlocal server_GameNotStarted = true
if server_GameNotStarted == true then
return 1
else
return 0
end