属性とシグナル

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

既存の属性

デフォルトの Roblox マッチメイキング構成は、プレイヤーの場所、年齢グループ、遅延などの既存の属性に基づくシグナルを使用します。

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

属性 種類 説明
推定プレイヤーの遅延 数値サーバー上のプレイヤーの推定遅延。
友達がいる カテゴリ化サーバーが参加プレイヤーと同じ IP アドレスを持つ友人や他のプレイヤーを持っているかどうか。
ボイスチャットが有効になっているか カテゴリ化プレイヤーがボイスチャットを有効にしているかどうか。
プレイヤーの年齢 数値プレイヤーの年齢。
プレイヤーデバイスタイプ カテゴリ化プレイヤーのデバイスタイプ。モバイルデバイス、コンピュータ、タブレット、コンソール、または VR デバイスがあります。
プレイヤーの言語 カテゴリ化プレイヤーの言語。
プレイヤーのプレイ履歴 数値過去 28 日間にプレイヤーが宇宙でプレイした分のログ-10番号。
サーバーの占有率 数値サーバーにいるプレイヤーの数。

既存のシグナル

次に示すのは、Roblox 属性に基づいて派生した Roblox 定義のシグナルです:

シグナル 説明
年齢 サーバーのプレイヤーの平均年齢と参加プレイヤーの年齢の違い、最大関連差は 25 です。
装置タイプ 参加プレイヤーと同じ装置タイプを持つサーバーのプレイヤー比率
友達 サーバーに参加プレイヤーと友達の人数、または参加プレイヤーとIPアドレスを共有する人数。1 プレイヤーが好ましい場合、0 そうでない場合。
遅延 サーバーの推定プレイヤー遅延、最大関連値 250。
言語 参加プレイヤーと同じ言語のサーバー内のプレイヤーの割合
占有率 サーバーのプレイヤー比率とサーバーの容量の比率。
プレイ履歴 サーバーの平均再生履歴と参加プレイヤーの再生履歴の違い、最大関連差は 4.6
ボイスチャット 音声チャットを有効にしたサーバーのプレイヤー比率。

年齢

サーバー上のプレイヤーの平均年齢と参加プレイヤーの年齢を比較する数字シグナル。このシグナルは、最大関連差が 25 です。シグナルスコアは年齢差に逆に関連しており、年齢差が低いほどスコアが高くなります。


ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, where
ageDifference = abs(avgServerAge - joiningPlayerAge)

デバイスタイプ

参加プレイヤーと同じ装置タイプのサーバー上のプレイヤー比率を測定するカテゴリシグナル。デバイスの種類には、コンピュータ、モバイルデバイス、タブレット、コンソール、VR デバイスがあります。


deviceTypeSignalScore = (# players with same device as joining player) / (# players on the server)

友達

好ましいプレイヤーは、参加プレイヤーと友達であるか、参加プレイヤーと同じ IP アドレスを共有しているプレイヤーです。フレンドシグナルは、サーバーにプレイヤーが優先されている場合のスコアが 1 のカテゴリカルシグナルで、サーバーにプレイヤーが優先されていない場合のスコアは 0 です。


friendsSignalScore = hasFriends ? 1 : 0

フレンドシグナルは、最大関連値 1 の数字シグナルとしても考えられます。


friendsSignalScore = min(# preferred players in server, 1) / 1

言語

参加プレイヤーと同じ言語設定を共有するサーバー上のプレイヤーの比率を測定するカテゴリシグナル。


languageSignalScore = (# players with same language setting as joining player) / (# players on the server)

遅延

参加プレイヤーがサーバー上でプレイする場合の推定されるパイング時間をミリ秒で測定する数字シグナル。このシグナルの最大関連値は 250 ミリ秒です。シグナルスコアは、ピングと逆相関しているため、低いピング値のスコアが高くなります。


latencySignalScore = 1 - min(250, estimatedPingMs) / 250

オクッパンス

サーバー上のプレイヤーの比率を測定する数字シグナル。


occupancySignalScore = (# players in server) / serverCapacity

プレイ履歴

プレイ履歴属性値は、過去 28 日間にプレイヤーが宇宙でプレイした分のログ-10 番号です。この数字シグナルは、サーバー上のプレイヤーの平均ログ-10プレイ履歴値と、参加プレイヤーのプレイ履歴値を比較します。このシグナルは、最大関連差 4.6を持っています。シグナルスコアは、プレイ履歴の差と逆に関連しているため、プレイ履歴の差が低いほどスコアが高くなります。


playHistorySignalScore = 1 - min(4.6, playHistoryDifference / 4.6), where
playHistoryDifference = abs(avgServerPlayHistory - joiningPlayerPlayHistory)

ボイスチャット

プレイヤーは、ボイスチャットを有効または無効にすることができます。ボイスチャットシグナルは、参加プレイヤーと同じボイスチャット設定を持つプレイヤーの比率を測定するカテゴリカルシグナルで、サーバー上のプレイヤーの数になります。

場所にボイスチャットが無効になっている場合、ボイスチャットシグナルの重量は 0 です。


voiceChatSignalScore = (# players with same voice chat setting as joining player) / (# players on the server)

カスタム属性

カスタム属性は、プレイヤーとサーバーのデータへのカスタムシグナルへのアクセスを提供します。自分のカスタム属性を作成する方法について詳しくは、カスタム属性を作成する を参照してください。既存の Roblox 属性に関する詳細情報は、既存の属性 を参照してください。

属性 特徴
プレーヤ データストアに保存され続ける、プレイヤーのレベルやエクスペリエンス内のスコアなどの永続的なカスタムプレイヤーデータ DataStore
サーバー 永続しないし、サーバーがアクティブな期間限りにのみ存在 サーバーレベルやゲームモードのようなサーバー固有のデータ 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
-- レベル属性を取得する
local currentLevel, error = MatchmakingService:GetServerAttribute("Level")
if error then
print(error)
else
print("Current level: " .. currentLevel)
end
-- レベル属性値を上級に更新する
local success, error = MatchmakingService:SetServerAttribute("Level", "Advanced")
if not success then
print("Failed to update server attribute [Level] to [Advanced] due to error: " .. error)
else
print("Successfully set [Level] to [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を返します。

サーバーの数字シグナルの定数値式 formula for server numerical signal

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 = "Survival"
local joining_player_GameMode = "Survival"
if server_GameMode = joining_player_GameMode then
return 1
else
return 0
end
定数値と比較する

サーバーの属性値が真の定数値と同じになると、スコアは 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