기존 특성
기본 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, 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를 사용하여 관리됩니다 |
플레이어 특성 예시
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을 반환합니다.
서버 숫자 신호의 상수 값 수식
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
상수 값과 비교
서버의 특성 값이 상수 값인 true와 동일할 때 점수는 1입니다. 그렇지 않으면 신호 점수는 0입니다.
서버 카테고리 신호의 상수 값 수식
if server_{attribute_name} = constant_value thenreturn 1elsereturn 0end
서버 카테고리 신호의 상수 값 예시
local server_GameNotStarted = trueif server_GameNotStarted = true thenreturn 1elsereturn 0end