既存の属性
デフォルトのRobloxマッチメイキング構成は、プレイヤーの位置、年齢層、レイテンシなどの既存の属性に基づく信号を使用します。
Robloxが自動的にデフォルト構成に含めないデータをマッチメイキングに使用するには、カスタム属性とカスタム信号を作成する必要があります。
| 属性 | タイプ | 説明 |
|---|---|---|
| 推定プレイヤーレイテンシ | 数値 | サーバー内のプレイヤーの推定レイテンシ。 |
| 友達がいるか | カテゴリカル | サーバーに参加しているプレイヤーと同じIPアドレスを持つ友達または他のプレイヤーがいるかどうか。 |
| ボイスチャットが有効か | カテゴリカル | プレイヤーがボイスチャットを有効にしているかどうか。 |
| プレイヤーの年齢 | 数値 | プレイヤーの年齢。 |
| プレイヤーデバイスタイプ | カテゴリカル | プレイヤーのデバイスタイプ。モバイルデバイス、コンピュータ、タブレット、コンソール、またはVRデバイスのいずれか。 |
| プレイヤーの言語 | カテゴリカル | プレイヤーの言語。 |
| プレイヤーのプレイ履歴 | 数値 | 過去28日間にユニバースでプレイヤーがプレイした時間の対数(log-10)で表された分数。 |
| サーバーの占有率 | 数値 | サーバー内のプレイヤーの数。 |
| プレイヤーのテキストチャットグループ | カテゴリカル | プレイヤーが一緒にテキストチャットできるプレイヤーのテキストチャットグループ。 |
既存の信号
以下は、Robloxの属性に基づいて派生したRoblox定義の信号です:
| 信号 | 説明 |
|---|---|
| 年齢 | サーバー内のプレイヤーの平均年齢と参加プレイヤーの年齢の差。最大関連差は25。 |
| デバイスタイプ | 参加プレイヤーと同じデバイスタイプを持つサーバー内のプレイヤーの比率。 |
| 友達 | サーバー内で参加プレイヤーと友達である人の数。または、参加プレイヤーと同じIPアドレスを共有する人の数です。優先プレイヤーがいる場合は1、いない場合は0。 |
| レイテンシ | サーバーの推定プレイヤーレイテンシ。最大関連値は250。 |
| 言語 | 参加プレイヤーと同じ言語を話すサーバー内のプレイヤーの比率。 |
| 占有率 | サーバー内のプレイヤー数とサーバーの定員の比率。 |
| プレイ履歴 | サーバー内のプレイヤーの平均プレイ履歴と参加プレイヤーのプレイ履歴の差。最大関連差は4.6。 |
| ボイスチャット | ボイスチャットが有効なサーバー内のプレイヤーの比率。 |
| テキストチャット | 参加プレイヤーと一緒にテキストチャットできるサーバー内のプレイヤーの比率。 |
年齢
サーバー内のプレイヤーの平均年齢と参加プレイヤーの年齢を比較する数値信号。この信号の関連最大差は25です。信号スコアは年齢差に反比例しており、つまり年齢差が小さいほどスコアが高くなります。
ここで、
デバイスタイプ
参加プレイヤーと同じデバイスタイプを持つサーバー内のプレイヤーの比率を測定するカテゴリカル信号。デバイスタイプには、コンピュータ、モバイルデバイス、タブレット、コンソール、VRデバイスが含まれます。
友達
優先プレイヤーは、参加プレイヤーと友達であるか、参加プレイヤーと同じIPアドレスを共有するプレイヤーです。友達信号はカテゴリカル信号であり、サーバー内に優先プレイヤーがいる場合は1、いない場合は0のスコアを持ちます。
友達信号は最大関連値1の数値信号とも見なすことができます。
言語
参加プレイヤーと同じ言語設定を持つサーバー内のプレイヤーの比率を測定するカテゴリカル信号。
レイテンシ
参加プレイヤーがサーバーでプレイした場合の推定ping時間をミリ秒単位で測定する数値信号。この信号の最大関連値は250ミリ秒です。信号スコアはpingに反比例しており、つまりping値が低いほどスコアが高くなります。
占有率
サーバー内のプレイヤー数とサーバーの定員の比率を測定する数値信号。
プレイ履歴
プレイ履歴属性値は、過去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
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 thenwarn(errorMessage)elseprint("Current level: " .. currentLevel)end-- Level属性値をAdvancedに更新local success, errorMessage = MatchmakingService:SetServerAttribute("Level", "Advanced")if not success thenwarn("Failed to update server attribute [Level] to [Advanced] due to error: " .. errorMessage)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に返します。
定数値公式でのサーバー数値信号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