既存の属性
デフォルトの Roblox マッチメイキング構成は、プレイヤーの場所、年齢グループ、遅延などの既存の属性に基づくシグナルを使用します。
Roblox がデフォルト設定に自動的に含まれないマッチメイキング用のデータを使用するには、カスタム属性 と カスタムシグナル を作成する必要があります。
属性 | 種類 | 説明 |
---|---|---|
推定プレイヤーの遅延 | 数値 | サーバー上のプレイヤーの推定遅延。 |
友達がいる | カテゴリ化 | サーバーが参加プレイヤーと同じ IP アドレスを持つ友人や他のプレイヤーを持っているかどうか。 |
ボイスチャットが有効になっているか | カテゴリ化 | プレイヤーがボイスチャットを有効にしているかどうか。 |
プレイヤーの年齢 | 数値 | プレイヤーの年齢。 |
プレイヤーデバイスタイプ | カテゴリ化 | プレイヤーのデバイスタイプ。モバイルデバイス、コンピュータ、タブレット、コンソール、または VR デバイスがあります。 |
プレイヤーの言語 | カテゴリ化 | プレイヤーの言語。 |
プレイヤーのプレイ履歴 | 数値 | 過去 28 日間にプレイヤーが宇宙でプレイした分のログ-10番号。 |
サーバーの占有率 | 数値 | サーバーにいるプレイヤーの数。 |
既存のシグナル
次に示すのは、Roblox 属性に基づいて派生した Roblox 定義のシグナルです:
シグナル | 説明 |
---|---|
年齢 | サーバーのプレイヤーの平均年齢と参加プレイヤーの年齢の違い、最大関連差は 25 です。 |
装置タイプ | 参加プレイヤーと同じ装置タイプを持つサーバーのプレイヤー比率 |
友達 | サーバーに参加プレイヤーと友達の人数、または参加プレイヤーとIPアドレスを共有する人数。1 プレイヤーが好ましい場合、0 そうでない場合。 |
遅延 | サーバーの推定プレイヤー遅延、最大関連値 250。 |
言語 | 参加プレイヤーと同じ言語のサーバー内のプレイヤーの割合 |
占有率 | サーバーのプレイヤー比率とサーバーの容量の比率。 |
プレイ履歴 | サーバーの平均再生履歴と参加プレイヤーの再生履歴の違い、最大関連差は 4.6 |
ボイスチャット | 音声チャットを有効にしたサーバーのプレイヤー比率。 |
年齢
サーバー上のプレイヤーの平均年齢と参加プレイヤーの年齢を比較する数字シグナル。このシグナルは、最大関連差が 25 です。シグナルスコアは年齢差に逆に関連しており、年齢差が低いほどスコアが高くなります。
ageDifferenceSignalScore = 1 - min(25, ageDifference) / 25, whereageDifference = 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), whereplayHistoryDifference = 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 thenprint(error)elseprint("Current level: " .. currentLevel)end-- レベル属性値を上級に更新するlocal success, error = MatchmakingService:SetServerAttribute("Level", "Advanced")if not success thenprint("Failed to update server attribute [Level] to [Advanced] due to error: " .. error)elseprint("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 = 2000local joining_player_Elo = 1000local max_relevant_difference = 1500local 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 = 4500local joining_player_PowerLevel = 9901local max_relevant_difference = 1500local constant_value = 5000local 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} / occupancyreturn score
プレイヤーのカテゴリシグナルのクラスタリング例
local num_players_same_Guild = 15local occupancy = 19local score = num_players_same_Guild / occupancyreturn score
多様化する
サーバーに参加プレイヤーの属性と異なる属性を持つプレイヤーの割合を最大化します。
プレイヤーのカテゴリシグナルの分類式を多様化する
local score = num_players_same_{attribute_name} / occupancyreturn 1 - score
プレイヤーのカテゴリシグナルの例の多様化
local num_players_same_RpgClass = 15local occupancy = 19local score = num_players_same_RpgClass / occupancyreturn 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 = 4500local joining_player_Level = 9000local max_relevant_difference = 1500local 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 = 500local max_relevant_difference = 1000local constant_value = 1000local 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} thenreturn 1elsereturn 0end
サーバーカテゴリシグナルのプレイヤー例への参加
local server_GameMode = "Survival"local joining_player_GameMode = "Survival"if server_GameMode = joining_player_GameMode thenreturn 1elsereturn 0end
定数値と比較する
サーバーの属性値が真の定数値と同じになると、スコアは 1 です。そうでない場合、シグナルスコアは 0 です。
サーバーカテゴリシグナルの定数値フォームュラ
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
サーバーカテゴリシグナルの定数値の例
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end