SmartMatch 매치 메이킹 사용
이 항목에서는 SmartMatch를 사용하여 멀티플레이어 게임에서 플레이어를 일치시키는 방법에 대해 설명합니다.
흐름도: SmartMatch 매치 메이킹 프로세스
매치 티켓 세션과 매치 티켓 만들기
플레이어와 세션에 관한 매치 메이킹 특성 설정
매치 메이킹 실행
매치 티켓 유지하기
게임 세션을 매치 티켓 세션으로 다시 사용
매치 티켓 삭제
Xbox Compute를 사용하여 게임 매치 메이킹 수행
참고 항목
흐름도: SmartMatch 매치 메이킹 프로세스
다음 순서도는 SmartMatch 매치 메이킹 프로세스를 설명합니다.
매치 티켓 세션과 매치 티켓 만들기
매치 메이킹 절차가 시작되기 전에 매치 메이킹 “스카우트”는 매치 메이킹에 함께 들어가고 싶어하는 사람들의 그룹을 나타내는 매치 메이킹 티켓 세션을 설정합니다. 이 그룹의 모든 플레이어는 XblMultiplayerSessionJoin을 사용하여 세션에 참가합니다.
티켓 세션이 만들어지고 플레이어로 채워진 후 타이틀이 XblMatchmakingCreateMatchTicketAsync를 사용하여 매치 메이킹 서비스로 세션을 제출합니다.
이 메서드에서는 티켓 세션을 나타내는 매치 티켓을 만든 후, 티켓 세션의 /servers/matchmaking/properties/system/status
필드를 searching
으로 업데이트합니다.
자세한 내용은 멀티플레이어 작업 항목의 매치 티켓 만들기 섹션을 참조하세요.
매치 티켓 만들기 메서드의 응답은 XblCreateMatchTicketResponse 개체입니다. 응답에 매치 티켓 ID가 포함되어 있습니다. 티켓을 삭제하여 매치 메이킹을 취소할 수 있는 GUID입니다. 또한 응답에는 플레이어 기대치를 설정하는 데 사용할 수 있는 호퍼의 평균 대기 시간이 포함되어 있습니다.
플레이어와 세션에 관한 매치 메이킹 특성 설정
타이틀은 매치 메이킹에 대해 세션을 제출할 때 매치 메이킹 서비스가 해당 세션을 다른 세션들과 그룹화할 때 사용하는 특성을 설정할 수 있습니다. 타이틀은 티켓 수준 또는 구성원별 수준에서 속성을 지정할 수 있습니다.
매치 티켓 수준에서 매치 메이킹 특성 설정
타이틀은 XblMatchmakingCreateMatchTicketAsync 메서드의 ticketAttributesJson
매개 변수에 있는 매치 티켓 수준에서 특성을 제출 합니다.
티켓 수준에 지정된 특성은 멤버별 수준에 지정된 것과 동일한 특성을 재정의합니다.
멤버별 수준에서 매치 메이킹 특성 설정
타이틀은 매치 티켓 세션에서 각 멤버에 대한 멤버별 특성을 지정합니다.
이 특성은 matchAttrs
의 속성 이름을 사용하여 XblMultiplayerSessionCurrentUserSetCustomPropertyJson을 호출하여 설정됩니다.
이 호출은 티켓 세션 내 각 플레이어의 /members/{index}/properties/custom/matchAttrs
필드에 특성을 배분합니다.
매치 메이킹 프로세스는 호퍼에 대한 Xbox 서비스 구성에서 해당 속성에 대해 지정된 flatten
메서드를 기반으로 멤버당 "평면화"를 단일 티켓 레벨 속성으로 만듭니다.
이 항목은 파트너 센터에서 구성됩니다.
매치 메이킹 실행
티켓 세션과 매치 티켓이 만들어졌으면 매치 메이킹 서비스는 이렇게 표현된 티켓 세션을 다른 그룹들을 대표하는 다른 티켓 세션들과 매칭하고, 매치 대상 세션을 만들거나 식별합니다. 그리고 대상 세션에 매칭된 플레이어들을 위해 예약을 한 후, 이 티켓 세션들에 매칭되었다고 표시를 합니다. MPSD(멀티플레이어 세션 디렉터리)는 티켓 세션의 이 같은 변경 사항을 타이틀에 알립니다.
그런 다음, 타이틀은 충분한 플레이어가 있는지 확인하기 위해 대상 세션을 초기화하는 단계를 수행해야 합니다. 타이틀은 플레이어가 서로 성공적으로 연결될 수 있도록 QoS(서비스 품질) 검사를 수행합니다. 초기화 또는 QoS에 실패할 경우, 타이틀은 다른 그룹을 찾을 수 있도록 해당 티켓 세션에 다시 제출할 것을 표시합니다. 자세한 내용은 대상 세션 초기화 및 QoS를 참조하세요.
매치 활동이 실행되는 동안 세션의 JSON 개체에 다음과 같은 변화가 일어납니다.
found
(으)로 설정된/servers/matchmaking/properties/system/status
필드대상 세션으로 설정된
/servers/matchmaking/properties/system/targetSessionRef
필드/members/{index}/constants/custom/matchmakingResult/playerAttrs
필드에 복사된 각 티켓 세션의/members/{index}/properties/custom/matchAttrs
필드각 플레이어에 대해 경기 티켓의
ticketAttributes
필드에서/members/{index}/constants/custom/matchmakingResult/ticketAttrs
필드로 복사된 티켓 속성
매치 티켓 유지하기
매치 메이킹 서비스는 세션에 매치 티켓이 생성되는 시점에 티켓 세션의 스냅샷을 사용합니다. 그 결과, 플레이어가 그 티켓 세션에 들어오거나 나갈 경우 타이틀은 매치 메이킹 서비스를 이용하여 매치 티켓을 삭제한 후 다시 만듭니다.
게임 세션을 매치 티켓 세션으로 다시 사용
Important
preserveSession
이(가) Always
(으)로 설정된 두 세션은 결합할 수 없으므로 서로 일치하지 않습니다. 타이틀에 사용된 매치 메이킹 흐름에서 이 점을 고려해야 합니다.
타이틀은 기존 게임 세션을 매치 티켓 세션으로 재사용하여 더 많은 플레이어가 이미 진행 중인 게임에 참여할 수 있도록 합니다.
이 함수를 사용하려면 타이틀에서 preserveSession
매개변수를 XblPreserveSessionMode::Always
(으)로 설정하여 XblMatchmakingCreateMatchTicketAsync로 호출하여 매치 티켓을 만들어야 합니다.
그러면 매치 메이킹 서비스는 티켓에 사용되는 기존 세션이 매치 메이킹 프로세스가 진행되는 동안 유지되게 하여 결과적으로 대상 세션이 되게 합니다.
매치 티켓 삭제
매치 티켓을 삭제하려면 타이틀이 XblMatchmakingDeleteMatchTicketAsync을(를) 호출합니다. 티켓 삭제 중:
티켓 세션의 플레이어에 대한 매치 메이킹을 중지합니다.
티켓 세션의
/servers/matchmaking/properties/system/status
필드를canceled
(으)로 업데이트합니다.
Xbox Compute를 사용하여 게임 매치 메이킹 수행
다음은 플레이어가 Xbox Compute 기반 게임에 매치 메이크되도록 하기 위해 수행되는 개략적인 단계입니다. 타사에서 호스팅하는 게임에도 유사한 흐름이 적용되어야 합니다.
스카우트 클라이언트가 그룹을 대표할 티켓 세션을 만듭니다. 이 세션에는 잠재적 데이터 센터들의 목록이 포함되는데, 이것은 세션 구성에서
/constants/system/measurementServerAddresses
에 위치합니다. 데이터 센터 목록이 정적인 경우 세션 템플릿에서 가져오거나 Xbox Compute에서 처음 가져온 후 세션 생성 시 데이터 센터 목록을 작성하는 클라이언트에서 가져옵니다. 이 세션에는targetSessionConstants/custom/gameServerPlatform
개체에gsiSetId
,gameVariantId
및maxAllowedPlayers
값도 포함되어 있습니다.그룹의 다른 모든 플레이어가 티켓 세션에 참여합니다.
그룹의 모든 구성원은 티켓 세션의
/constants/system
개체에서measurementServerAddresses
값을 다운로드하여 플랫폼 API를 사용하여 ping한 다음/members/{index}/properties/system/serverMeasurements
에 정의된 대로 세션에 선호되는 데이터 센터의 정렬된 목록을 업로드합니다.참고 항목
타이틀은 Xbl MultiplayerSessionConstantsSetMeasurementServerAddressesJson 메서드와 XblMultiplayerSessionConstants
::MeasurementServerAddressesJson
을(를) 사용하여 세션에서measurementServerAddresses
값을 설정하고 검색할 수 있습니다.스카우트는 티켓 세션에 대한 참조를 전달하여 XblMatchmakingCreateMatchTicketAsync를 호출합니다.
참고 항목
티켓 세션 개체에 일치하지 않는 상수가 있을 경우, 티켓 생성 메서드가 성공하지 못할 수 있습니다. 호퍼에
MUST
규칙을 추가하여 일치하지 않는 상수가 있는 플레이어와의 매칭을 방지하여 이를 방지할 수 있습니다.XblMatchTicketDetailsResponse
::PreserveSession
이(가)Never
(으)로 설정된 경우 매치 메이킹 서비스는 각 구성원의 서버 측정치를 티켓의 내부 표현으로 복사합니다. "special
" 티켓 특성으로 티켓의 내부 표현에 저장된 티켓에 대한 단일 서버 측정 컬렉션으로 티켓 멤버에 대한 서버 측정을 평면화합니다.XblMatchTicketDetailsResponse
::PreserveSession
이(가)Always
(으)로 설정된 경우 서버 측정값은 사용되지 않습니다. 대신 매치 메이킹 서비스는 세션의/properties/system/matchmaking/serverConnectionString
값을 지연 시간이 0이고 크기 1의serverMeasurements
컬렉션으로 티켓의 내부 표현에 복사합니다.매치 메이킹 서비스는 이 서버 측정 컬렉션들을 고려하여 이 티켓 세션을 다른 그룹들을 나타내는 다른 세션들과 매치합니다. 서비스는 동일한 선호 데이터 센터를 가진 다른 그룹과 그룹을 일치시키려고 시도합니다.
매치 메이킹 서비스는 일치하는 그룹을 찾은 후 대상 세션을 만들거나 식별하고 함께 매치되는 티켓 세션들의 모든 플레이어를 추가합니다. 서비스는 일치하는 그룹에 대한 최종 평면화 서버 측정값을
/properties/system/serverConnectionStringCandidates
에 기록합니다. 그 다음, 대상 세션에 있는 모든 신규 멤버의 원래 서버 측정값을/members/{index}/constants/system/matchmakingResult/serverMeasurements
에 기록합니다.앞서 언급한 바와 같이 모든 플레이어가 대상 세션에서 초기화를 수행합니다. 그러나 플레이어는 Xbox Compute에 연결하기 때문에 서로 QoS를 수행하여 연결을 확인하지 않습니다.
모든 플레이어가 플레이합니다.