FlexMatch를 게임 클라이언트에 추가 - 아마존 GameLift

기계 번역으로 제공되는 번역입니다. 제공된 번역과 원본 영어의 내용이 상충하는 경우에는 영어 버전이 우선합니다.

FlexMatch를 게임 클라이언트에 추가

이 주제에서는 클라이언트 측 게임 서비스에 FlexMatch 매치메이킹 지원을 추가하는 방법에 대해 설명합니다. FlexMatch를 Amazon GameLift 관리형 호스팅과 함께 사용하든 다른 호스팅 솔루션에서 사용하든 프로세스는 기본적으로 동일합니다. FlexMatch 및 게임에 대해 사용자 지정 매치메이커를 설정하는 방법에 대해 자세히 알아보려면 다음 주제를 참조하세요.

게임에 대해 FlexMatch 매치메이킹을 활성화하려면 다음 기능을 추가합니다.

  • 한 명 또는 여러 명의 플레이어에 대한 매치메이킹 요청 준비(필수).

  • 매치메이킹 요청 상태 추적(필수).

  • 제안된 매치에 대한 플레이어 수락 요청(선택 사항).

  • 새로운 매치에 대한 게임 세션이 생성되면 플레이어 연결 정보를 얻고 게임에 참여합니다.

플레이어에 대해 매치메이킹 요청 준비

게임 클라이언트에서 클라이언트 측 게임 서비스를 통해 매치메이킹 요청을 수행하는 것이 좋습니다. 신뢰할 수 있는 소스를 사용하면 해킹 시도 및 가짜 플레이어 데이터를 보다 쉽게 막을 수 있습니다. 게임에 세션 디렉터리 서비스가 있는 경우 매치메이킹 요청을 처리하기 위한 좋은 옵션이 됩니다.

클라이언트 서비스를 준비하려면 다음 작업을 수행합니다.

  • Amazon GameLift API를 추가합니다. 클라이언트 서비스는 AWS SDK에 속한 Amazon GameLift API의 기능을 사용합니다. 클라이언트 서비스용 Amazon GameLift SDK 섹션을 참조하여 AWS SDK에 대해 자세히 알아보고 최신 버전을 다운로드하세요. 이 SDK를 게임 클라이언트 서비스 프로젝트에 추가합니다.

  • 매치메이킹 티켓 시스템을 설정합니다. 모든 매치메이킹 요청에 고유 티켓 ID를 할당해야 합니다. 고유 ID를 생성한 후 새 매치 요청에 할당하는 메커니즘이 필요합니다. 티켓 ID는 최대 128자까지 어떤 문자열 형식도 사용 가능합니다.

  • 매치메이커 정보를 가져옵니다. 사용할 계획인 매치메이킹 구성 이름을 가져옵니다. 또한 매치메이커의 규칙 세트에 정의된 필수 플레이어 속성에 대한 매치메이커의 목록이 필요합니다.

  • 플레이어 데이터를 가져옵니다. 각 플레이어에 대한 관련 데이터를 가져오는 방법을 설정합니다. 여기에는 플레이어가 게임에 배정될 가능성이 있는 각 리전에 대한 플레이어 ID, 속성 값 및 업데이트된 지연 시간 데이터가 포함됩니다.

  • (선택 사항) 매치 채우기를 활성화합니다. 기존 매칭된 게임을 채울 방법을 결정합니다. 매치메이커의 채우기 모드가 “수동”으로 설정된 경우 게임에 채우기 지원을 추가할 수 있습니다. 채우기 모드가 “자동”으로 설정된 경우 개별 게임 세션에 대해 채우기 모드를 해제하는 방법이 필요할 수 있습니다. FlexMatch로 기존 게임 채우기에서 매치 채우기를 관리하는 방법에 대해 자세히 알아보세요.

플레이어에 대해 매치메이킹 요청

FlexMatch 매치메이커에 대한 매치메이킹 요청을 생성하고 관리하기 위해 클라이언트 서비스에 코드를 추가합니다. FlexMatch 매치메이킹을 요청하는 프로세스는 FlexMatch를 Amazon GameLift 관리형 호스팅과 함께 사용하는 게임과 FlexMatch를 독립형 솔루션으로 사용하는 게임의 경우 동일합니다.

매치메이킹 요청 생성:
  • Amazon GameLift API StartMatchmaking을 호출합니다. 각 요청에는 다음 정보가 포함되어야 합니다.

    매치메이커

    요청에 사용할 매치메이킹 구성의 이름입니다. FlexMatch가 각 요청을 지정된 매치메이커에 대한 풀에 배치하며 요청은 매치메이커의 구성 방법에 따라 처리됩니다. 여기에는 시간 제한 적용, 매치에 대한 플레이어 수락 요청 여부, 결과 게임 세션을 배치할 때 사용할 대기열 등이 포함됩니다. FlexMatch 매치메이커 디자인에서 매치메이커 및 규칙 세트에 대해 자세히 알아보세요.

    티켓 ID

    요청에 할당된 고유 티켓 ID입니다. 이벤트 및 알림 등 요청과 관련된 모든 항목이 티켓 ID를 참조합니다.

    플레이어 데이터

    생성할 매치의 대상인 플레이어 목록입니다. 요청에 속한 플레이어 중 한 명이라도 매치 규칙 및 최소 지연 시간에 따라 매치 요구 사항을 충족하지 않는 경우, 매치메이킹을 요청해도 성공적으로 매칭되지 않습니다. 매치 요청에 최대 10명의 플레이어를 포함시킬 수 있습니다. 요청에 여러 플레이어가 속해 있는 경우, FlexMatch는 단일 매치를 생성하여 모든 플레이어를 동일한 팀에 할당하려고 시도합니다(무작위 선택). 매치 팀 중 하나에 맞추기에는 요청에 플레이어가 너무 많이 포함되어 있는 경우, 요청이 매칭되지 않습니다. 예를 들어 2v2 매치(2명의 플레이어가 있는 2개의 팀)를 생성하도록 매치메이커를 설정하는 경우, 플레이어가 셋 이상 포함된 매치메이킹 요청을 전송할 수 없습니다.

    참고

    한 플레이어(플레이어 ID로 식별)는 한 번에 하나의 액티브 매치메이킹 요청에만 포함될 수 있습니다. 플레이어에 대해 새 요청을 생성할 때 동일한 플레이어 ID와 연결된 모든 활성 매치메이킹 티켓이 자동으로 취소됩니다.

    나열된 각 플레이어에 대해 다음 데이터를 포함합니다.

    • 플레이어 ID - 각 플레이어는 사용자가 생성한 고유 플레이어 ID를 가지고 있어야 합니다. 플레이어 ID 생성을 참조하세요.

    • 플레이어 속성 - 사용 중인 매치메이커가 플레이어 속성을 요청하는 경우 해당 요청은 각 플레이어에게 해당 속성을 제공해야 합니다. 필수 플레이어 속성은 매치메이커의 규칙 세트에 정의되어 있으며, 이 규칙 세트는 속성에 대한 데이터 형식도 지정합니다. 플레이어 속성은 규칙 세트가 해당 속성에 대해 기본값을 지정할 때에만 선택 사항입니다. 매치 요청이 모든 플레이어에게 필수 플레이어 속성을 제공하지 않는 경우 매치메이킹 요청이 성공할 수 없습니다. FlexMatch 규칙 세트 설계FlexMatch 규칙 세트 예제에서 매치메이커 규칙 세트 및 플레이어 속성에 대해 자세히 알아보십시오.

    • 플레이어 지연 시간 - 사용 중인 매치메이커에 플레이어 지연 시간 규칙이 있는 경우 요청은 각 플레이어에 대한 지연 시간을 보고해야 합니다. 플레이어 지연 시간 데이터는 플레이어당 하나 이상의 값 목록입니다. 이 데이터는 매치메이커 대기열에서 플레이어가 리전에 대해 경험하는 지연 시간을 나타냅니다. 요청에 플레이어에 대한 지연 시간 값이 포함되어 있지 않는 경우 플레이어가 매칭될 수 없으며 요청이 실패합니다.

매치 요청 세부 정보 검색:
  • 매치 요청이 전송되면 요청의 티켓 ID로 DescribeMatchmaking을 호출하여 요청 세부 정보를 볼 수 있습니다. 이 요청은 현재 상태를 포함한 요청 정보를 반환합니다. 요청이 성공적으로 완료되면 티켓에도 게임 클라이언트가 매치에 연결하는 데 필요한 정보가 포함됩니다.

매치 요청 취소:
  • 요청의 티켓 ID로 StopMatchmaking을 호출하여 언제든지 매치메이킹 요청을 취소할 수 있습니다.

매치메이킹 이벤트 추적

매치메이킹 프로세스에 대해 Amazon GameLift가 방출하는 이벤트를 추적하도록 알림을 설정합니다. 직접 알림을 설정하거나 SNS 주제를 생성하거나 Amazon EventBridge를 사용하여 알림을 설정할 수 있습니다. 알림 설정에 대한 자세한 내용은 FlexMatch 이벤트 알림 설정 섹션을 참조하세요. 알림을 설정하면 이벤트를 감지하고 필요할 경우 응답하기 위해 클라이언트 서비스에 리스너를 추가합니다.

또한 알림 없이 상당한 시간이 경과하면 상태 업데이트를 정기적으로 폴링하여 알림을 백업하는 것이 좋습니다. 매치메이킹 성능에 미치는 영향을 최소화하려면 매치메이킹 티켓을 제출한 후 30초 이상 기다린 후 또는 마지막으로 알림을 받은 후에만 폴링해야 합니다.

요청의 티켓 ID로 DescribeMatchmaking을 호출하여 현재 상태를 포함한 매치메이킹 요청 티켓을 검색합니다. 폴링은 10초에 1회가 넘지 않도록 하는 것이 좋습니다. 이 접근 방식은 소량 개발 시나리오에서만 사용할 수 있습니다.

참고

프로덕션 전 부하 테스트와 같이 대량의 매치메이킹을 사용하기 전에 이벤트 알림을 사용하여 게임을 설정해야 합니다. 공개 버전의 모든 게임은 볼륨에 관계없이 알림을 사용해야 합니다. 지속적인 폴링 접근 방식은 매치메이킹 사용량이 낮은 개발 중인 게임에만 적합합니다.

플레이어 수락 요청

플레이어 수락이 설정되어 있는 매치메이커를 사용 중인 경우 플레이어 수락 프로세스를 관리하기 위해 코드를 클라이언트 서비스에 추가합니다. 플레이어 수락을 관리하는 프로세스는 FlexMatch를 Amazon GameLift 관리형 호스팅과 함께 사용하는 게임과 FlexMatch를 독립형 솔루션으로 사용하는 게임의 경우 동일합니다.

제안된 매치에 대한 플레이어 수락 요청:
  1. 제안된 매치에 플레이어 수락이 필요할 때를 감지합니다. 매치메이킹 티켓을 모니터링하여 상태가 REQUIRES_ACCEPTANCE로 변경되는 때를 감지합니다. 이 상태가 변경되면 MatchmakingRequiresAcceptance FlexMatch 이벤트가 트리거됩니다.

  2. 모든 플레이어로부터 수락을 취득합니다. 매치메이킹 티켓의 모든 플레이어에게 제안된 매치 세부 정보를 제공하는 메커니즘을 생성합니다. 플레이어는 제안된 매치를 수락할지 아니면 거부할지를 나타낼 수 있어야 합니다. DescribeMatchmaking 호출을 통해 매치 세부 정보를 검색할 수 있습니다. 매치메이커가 제안된 매치를 철회하고 나가기 전에 플레이어가 응답할 수 있는 시간에는 제한이 있습니다.

  3. FlexMatch에 대한 플레이어 반응을 보고합니다. 수락 또는 거부로 AcceptMatch를 호출하여 플레이어 응답을 보고합니다. 매치가 성사되려면 매치메이킹 요청에 포함된 모든 플레이어가 매치를 수락해야 합니다.

  4. 수락이 안 된 티켓을 처리합니다. 제안된 매치의 플레이어가 매치를 거부하거나 수락 시간 제한 내에 응답하지 못하면 요청이 실패합니다. 매치를 수락한 플레이어의 티켓은 자동으로 티켓 풀로 반환됩니다. 매치를 수락하지 않은 플레이어의 티켓은 FAILURE 상태로 바뀌고 더 이상 처리되지 않습니다. 플레이어가 여러 명인 티켓의 경우 티켓에 있는 플레이어가 매치를 수락하지 않으면 티켓 전체가 실패합니다.

매치 연결

성공적으로 구성된 매치(상태 COMPLETED 또는 이벤트 MatchmakingSucceeded)를 처리하기 위한 코드를 클라이언트 서비스에 추가합니다. 여기에는 매치의 플레이어에게 알리고 해당 게임 클라이언트에게 연결 정보를 전달하는 작업이 포함됩니다.

Amazon GameLift 관리형 호스팅을 사용하는 게임의 경우 매치메이킹 요청이 성공적으로 처리되면 게임 세션 연결 정보가 매치메이킹 티켓에 추가됩니다. DescribeMatchmaking을 호출하여 완료된 매치메이킹 티켓을 검색합니다. 연결 정보에는 게임 세션의 IP 주소 및 포트는 물론 각 플레이어 ID에 대한 플레이어 세션 ID도 포함됩니다. GameSessionConnectionInfo에서 자세히 알아보세요. 게임 클라이언트는 이 정보를 사용하여 매치의 게임 세션에 직접 연결합니다. 연결 요청에는 플레이어 세션 ID와 플레이어 ID가 포함되어야 합니다. 이 데이터는 연결된 플레이어를 팀 할당을 포함한 게임 세션의 매치 데이터에 연결합니다(GameSession 참조).

Amazon GameLift FleetIQ를 비롯한 다른 호스팅 솔루션을 사용하는 게임의 경우 매치 플레이어가 적절한 게임 세션에 연결할 수 있는 메커니즘을 구축해야 합니다.

샘플 매치메이킹 요청

다음 코드 조각은 서로 다른 여러 매치메이커에 대한 매치메이킹 요청을 빌드합니다. 설명에 따라 요청은 매치메이커의 규칙 세트에 정의된 대로 사용 중인 매치메이커가 필요로 하는 플레이어 속성을 제공해야 합니다. 제공된 속성은 규칙 세트에 정의된 동일한 데이터 형식인 숫자(N) 또는 문자열(S)을 사용해야 합니다.

# Uses matchmaker for two-team game mode based on player skill level def start_matchmaking_for_cowboys_vs_aliens(config_name, ticket_id, player_id, skill, team): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill} }, "PlayerId": player_id, "Team": team }], TicketId=ticket_id) # Uses matchmaker for monster hunter game mode based on player skill level def start_matchmaking_for_players_vs_monster(config_name, ticket_id, player_id, skill, is_monster): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "desiredSkillOfMonster": {"N": skill}, "wantsToBeMonster": {"N": int(is_monster)} }, "PlayerId": player_id }], TicketId=ticket_id) # Uses matchmaker for brawler game mode with latency def start_matchmaking_for_three_team_brawler(config_name, ticket_id, player_id, skill, role): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "skill": {"N": skill}, "character": {"S": [role]}, }, "PlayerId": player_id, "LatencyInMs": { "us-west-2": 20} }], TicketId=ticket_id) # Uses matchmaker for multiple game modes and maps based on player experience def start_matchmaking_for_multi_map(config_name, ticket_id, player_id, skill, maps, modes): response = gamelift.start_matchmaking( ConfigurationName=config_name, Players=[{ "PlayerAttributes": { "experience": {"N": skill}, "gameMode": {"SL": modes}, "mapPreference": {"SL": maps} }, "PlayerId": player_id }], TicketId=ticket_id)