매치메이킹 규칙
Create rules that control how players are matched together based on their custom data and Quality of Service results.
읽는 시간 2분최근 업데이트: 8시간 전
규칙은 목표를 달성하기 위한 논리적 동작을 설명하는 일반적인 방법입니다. 규칙은 매치 수준과 팀 수준의 매치메이킹 로직에 적용됩니다. 매치 수준 규칙은 규칙이 정의된 매치의 유효성을 확인하며, 팀 수준 규칙은 규칙이 정의된 팀의 유효성을 확인합니다.
규칙 포맷
{ "Type": "RuleType", "Source": "SourcePath", "Not": true/false, "EnableRule": true/false, "Relaxations": [ { Relaxation1, Relaxation2 } ]}
필드 | 필수 여부 | 유형 | 설명 |
|---|---|---|---|
| Type | 예 | 문자열 | 적용할 규칙입니다. 아래의 지원되는 규칙 표를 참고하십시오. |
| Source | 예 | 문자열 | 데이터 소스 경로입니다. 지원되는 데이터 소스를 참조하십시오. |
| 레퍼런스 | 아니요 | 문자열, 숫자 또는 배열* | 비교할 레퍼런스입니다. 모든 규칙에서 사용되지 않습니다. *유효한 레퍼런스 유형은 규칙 유형에 따라 다릅니다. |
| Not | 아니요 | 부울 | true로 설정하면 규칙을 반대로 적용합니다. 지정하지 않으면 false입니다. |
| EnableRule | 아니요 | 부울 | false로 설정하면 규칙을 비활성화합니다. 지정하지 않으면 true입니다. 일반적으로 완화를 통해 규칙을 비활성화하거나 활성화할 때 사용됩니다. |
| Relaxations | 아니요 | 목록<완화> | 적용할 완화 목록입니다. 규칙 완화와 트리거를 참고하십시오. |
지원되는 규칙
규칙 | 입력 | 설명 |
|---|---|---|
| Difference | 소스: List<number> 레퍼런스: 숫자 | 목록 내 모든 값의 차이가 일정 범위 안에 있어야 합니다. |
| Equality | 소스: List<string or number> 레퍼런스: 문자열 또는 숫자* | 목록 내의 모든 값이 동일해야 합니다. *레퍼런스는 소스에 정의된 입력 유형입니다. |
| LessThan | 소스: 숫자 레퍼런스: 숫자 | 소스 값이 레퍼런스 값보다 작아야 합니다. |
| LessThanEqual | 소스: 숫자 레퍼런스: 숫자 | 소스 값이 레퍼런스 값보다 작거나 같아야 합니다. |
| GreaterThan | 소스: 숫자 레퍼런스: 숫자 | 소스 값이 레퍼런스 값보다 커야 합니다. |
| GreaterThanEqual | 소스: 숫자 레퍼런스: 숫자 | 소스 값이 레퍼런스 값보다 크거나 같아야 합니다. |
| InList | 소스: 문자열 또는 숫자 레퍼런스: List<string or number> | 소스 값이 레퍼런스 목록에 있어야 합니다. *레퍼런스는 소스에 정의된 입력 유형입니다. |
| Intersection | 소스: List<List<string or number>> 오버랩: 숫자 | 주어진 여러 목록으로 구성된 하나의 목록에 적어도 입력한 오버랩 숫자 이상의 교차가 있어야 합니다. |
지원되는 데이터 소스
모든 플레이어의 데이터
티켓에 속한 각 플레이어가 정의한 커스텀 데이터는Players.CustomData.{your_custom_field_name}모든 플레이어의 QoS
티켓 내 각 플레이어의 QoS(서비스 품질) 데이터는Players.QoSResults.LatencyPlayers.QoSResults.PacketLossLeaderboards
서버 권한이 있는 매치메이킹은 **Unity Leaderboards**와의 연동을 통해 지원됩니다. 각 플레이어의 리더보드 데이터는Players.CustomData.ExternalData.Leaderboard.ScorePlayers.CustomData.ExternalData.Leaderboard.TierIdExternalData사용 가능한 모든 리더보드 데이터는 자동으로 수신 티켓에 추가되고, 정의된 규칙에 따라 고려됩니다. 플레이어가 정의된 리더보드에 대한 데이터를 가지고 있지 않은 경우, 이 플레이어는 0점으로 이 리더보드에 추가됩니다. 단계가 활성화되지 않은 리더보드는 단계를 사용하는 규칙과 호환되지 않습니다. 이 풀에 할당된 모든 티켓은 매칭에 실패합니다."ExternalData": { "Leaderboard": { "Id": "my-leaderboard" }}
Cloud Save
서버 권한이 있는 매치메이킹도 **Unity Cloud Save**와의 연동을 통해 지원됩니다. 각 플레이어의 Cloud Save 데이터는Players.CustomData.ExternalData.CloudSave.{cloud_save_data_path}{cloud_save_data_path}Cloud Save 키 | Cloud Save 아이템 | 데이터 경로 | 검색된 값 |
|---|---|---|---|
| 기술 | 500 | 기술 | 500 |
| 맵 | | 맵 | |
| 인벤토리 | | Inventory.Apples | 10 |
ExternalData액세스 클래스는 플레이어 데이터를 어디에서 가져올지 지정합니다. 동일한 키에 각 액세스 클래스마다 다른 아이템이 저장될 수 있습니다. 액세스 클래스가 제공되지 않으면 기본적으로"ExternalData": { "CloudSave": { "AccessClass": "Protected", "Default": 0 }}
Protected지원되는 데이터 연산
매치메이킹 티켓의 플레이어 커스텀 데이터에 제공된 입력 중에서 일부는 규칙을 생성하기 위해 연산을 지원합니다.연산 | 입력 | 출력 | 설명 |
|---|---|---|---|
| Count | List<*> | 숫자 | 주어진 목록 내 요소의 개수를 가져옵니다. *모든 유형이 유효합니다. 예를 들어 문자열이나 부울, 목록, 숫자를 사용할 수 있습니다. |
| Median | List<Number> | 숫자 | 주어진 목록 내 숫자의 중간값을 가져옵니다. |
| Avg | List<Number> | 숫자 | 주어진 목록 내 숫자의 평균값을 가져옵니다. |
| Sum | List<Number> | 숫자 | 주어진 목록 내 숫자의 합을 가져옵니다. |
| Min | List<Number> | 숫자 | 주어진 목록 내 숫자 중 가장 작은 수를 가져옵니다. |
| Max | List<Number> | 숫자 | 주어진 목록 내 숫자 중 가장 큰 수를 가져옵니다. |
예시
다음은 Skill 필드에 액세스하는 예시입니다.다음은 매치/팀 내 모든 플레이어의 스킬 평균을 구하는 예시입니다.{ ..."Source": "Players.CustomData.Skill"... }
{ ..."Source": "Players.CustomData.Skill.Avg"... }
지원되는 규칙의 예시
Difference
다음 예시에서는 규칙이 적용되는 대상(매치 수준 또는 팀 수준)에 따라 매치나 팀에 속한 모든 플레이어 간의 스킬 포인트 차이가 200을 초과할 수 없습니다.{ "Type": "Difference", "Source": "Players.CustomData.Skill", "Reference": 200 // Valid types: number}
Equality
다음 예시에서는 팀 수준에 적용되는 규칙에 따라 Monster 팀의 모든 플레이어가 이 팀을 선택했어야 합니다.다음 예시에서는 매치 수준에 적용되는 규칙에 따라 매치 내 모든 플레이어의 비밀번호가 동일해야 합니다.{ "Type": "Equality", "Source": "Players.CustomData.SelectedTeam", "Reference": "Monster" // Valid types: string or number}
다음 예시에서는 매치 수준에 적용되는 규칙에 따라 매치 내 모든 플레이어의 스킬 등급이 동일해야 합니다.{ "Type": "Equality", "Source": "Players.CustomData.Password"}
{ "Type": "Equality", "Source": "Players.Custom.SkillBracket"}
LessThanEqual
다음 예시에서는 팀 수준에 적용되는 규칙에 따라 각 팀에 최대 두 명의 의무병이 있을 수 있습니다.{ "Type": "LessThanEqual", "Source": "Players.CustomData.PreferMedic.Count", "Reference": 2 // Valid types: number}
GreaterThanEqual
다음 예시에서는 매치 수준에 적용되는 규칙에 따라 매치 내 모든 플레이어의 스킬이 500 이상이어야 합니다.{ "Type": "GreaterThanEqual", "Source": "Players.CustomData.Skill", "Reference": 500 // Valid types: number}
InList
다음 예시에서는 팀 수준에 적용되는 규칙에 따라 Monster 캐릭터를 선택한 경우 플레이어는 Monster 팀에 배치되어야 합니다.{ "Type": "InList", "Source": "Players.CustomData.ChosenCharacter", "Reference": [ "Monster1", "Monster2", "Monster3" ] // Valid types: List<string> or List<number>}
Intersection
다음 예시에서는 매치 수준에 적용되는 규칙에 따라 매치 내 모든 플레이어가 공통으로 선호하는 맵이 적어도 3개 있어야 합니다.다음 예제에서는 매치 수준에 적용되는 규칙에 따라 매치 내 모든 플레이어가 레퍼런스 목록에 있는 아이템 중 하나 이상을 보유해야 합니다.{ "Type": "Intersection", "Source": "Players.CustomData.PreferredMaps", "Overlap": 3}
{ "Type": "Intersection", "Source": "Players.CustomData.Items", "Overlap": 1, "Reference": [ "PluePill", "RedPill" ] // Valid types: List<string> or List<number>}
리더보드
다음 예제에서는 팀 수준에 적용되는 규칙에 따라 팀 내 모든 플레이어의 리더보드 점수가 300 이하여야 합니다.다음 예제에서는 매치 수준에 적용되는 규칙에 따라 매치 내 모든 플레이어가 동일한 리더보드 단계에 있어야 합니다."TeamRules": [ { "Name": "Score", "Type": "Difference", "Source": "Players.CustomData.ExternalData.Leaderboard.Score", "ExternalData": { "Leaderboard": { "Id": "my-leaderboard" } }, "Reference": 300, "Not": false, "EnableRule": true }]
"MatchRules": [ { "Name": "Tier", "Type": "Equality", "Source": "Players.CustomData.ExternalData.Leaderboard.Tier", "ExternalData": { "Leaderboard": { "Id": "my-leaderboard" } }, "Not": false, "EnableRule": true }]
Cloud Save
다음 예제에서는 팀 수준에 적용되는 규칙에 따라 팀 내 모든 플레이어가 잠금 해제된 맵을 하나 이상 보유해야 합니다. 플레이어가 Cloud Save에Maps["starter"]"TeamRules": [ { "Name": "Unlocked Maps", "Type": "Intersection", "Source": "Players.CustomData.ExternalData.CloudSave.Maps.Unlocked", "ExternalData": { "CloudSave": { "AccessClass": "Protected", "Default": ["starter"] } }, "Not": false, "EnableRule": true, "Overlap": 1 }]