특성 및 신호

*이 콘텐츠는 AI(베타)를 사용해 번역되었으며, 오류가 있을 수 있습니다. 이 페이지를 영어로 보려면 여기를 클릭하세요.

기존 특성

기본 Roblox 매치메이킹 구성은 플레이어 위치, 연령 그룹 및 대기 시간과 같은 기존 특성에 따른 신호를 사용합니다.

Roblox가 기본 구성에 자동으로 포함하지 않는 매치메이킹에 데이터를 사용하려면 사용자 지정 특성사용자 지정 신호를 만들어야 합니다.

특성 유형 설명
예상 플레이어 대기 시간 숫자서버에서 플레이어의 예상 대기 시간.
친구 있음 범주화서버에 참가 플레이어와 동일한 IP 주소를 가진 친구 또는 다른 플레이어가 있는지 여부.
음성 채팅이 활성화되었는지 범주화플레이어에게 음성 채팅이 활성화되었는지 여부.
플레이어 나이 숫자플레이어의 나이.
플레이어 기기 유형 범주화플레이어의 장치 입력. 모바일 기기, 컴퓨터, 태블릿, 콘솔 또는 VR 기기수 있습니다.
플레이어 언어 범주화플레이어의 언어.
플레이어 플레이 기록 숫자지난 28일 동안 플레이어가 우주에서 플레이한 시간의 로그-10 숫자.
서버 점유도 숫자서버의 플레이어 수입니다.

기존 신호

다음은 Roblox 특성에 따라 파생된 Roblox에서 정의한 신호입니다: The following are Roblox-defined signals derived based on Roblox attributes:

신호 설명
나이 서버의 평균 나이와 조인 플레이어의 나이 간의 차이, 최대 관련 차이 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를 사용하여 관리됩니다
플레이어 특성 예시

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을 반환합니다.

서버 숫자 신호의 상수 값 수식

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
상수 값과 비교

서버의 특성 값이 상수 값인 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