FlexMatch 규칙 세트 설계 - 아마존 GameLift

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

FlexMatch 규칙 세트 설계

이 주제에서는 규칙 세트의 기본 구조 및 최대 40명의 플레이어로 이루어진 소규모 매치에서 규칙 세트를 구축하는 방법에 대해 다룹니다. 매치메이킹 규칙 세트가 수행하는 작업은 두 가지입니다. 하나는 매치의 팀 구조 및 크기를 레이아웃하는 것이고, 다른 하나는 플레이어를 선택하여 최상의 매치를 구성하는 방법을 매치메이커에게 알리는 것입니다.

하지만 매치메이킹 규칙 세트를 사용하면 더 많은 작업을 수행할 수 있습니다. 예를 들어, 다음을 수행할 수 있습니다.

  • 게임에 맞게 매치메이킹 알고리즘을 최적화합니다.

  • 최소 플레이어 지연 시간 요구 사항을 설정하여 게임 플레이 품질을 보호합니다.

  • 시간이 지남에 따라 팀 요구 사항과 매치 규칙을 점진적으로 완화하여 모든 활성 플레이어가 원할 때 적절한 매치를 찾을 수 있습니다.

  • 그룹 집계를 사용하여 그룹 매치메이킹 요청에 대한 처리를 정의합니다.

  • 40명 이상의 플레이어로 구성된 라지 매치를 처리합니다. 라지 매치 구축에 대한 자세한 내용은 FlexMatch 라지 매치 규칙 세트 설계 섹션을 참조하세요.

매치메이킹 규칙 세트를 만들 때는 다음과 같은 선택 및 필수 작업을 고려합니다.

Amazon GameLift 콘솔 또는 CreateMatchmakingRuleSet 작업을 사용하여 규칙 세트를 구축할 수 있습니다.

규칙 세트 설명(필수)

규칙 세트에 대한 세부 정보를 제공합니다.

  • 이름 (선택 사항) - 사용자가 직접 사용할 수 있는 설명 레이블입니다. 이 값은 Amazon GameLift로 규칙 세트를 생성할 때 지정하는 규칙 세트 이름과 관련이 없습니다.

  • ruleLanguageVersion - FlexMatch 규칙을 생성하는 데 사용되는 속성 표현식 언어의 버전입니다. 값은 1.0여야 합니다.

매치 알고리즘 사용자 정의

FlexMatch는 대부분의 게임에 대한 기본 알고리즘을 최적화하여 플레이어가 최소한의 대기 시간으로 적절한 매치에 참여할 수 있도록 합니다. 알고리즘을 사용자 정의하고 게임에 맞게 매치메이킹을 조정할 수 있습니다.

다음은 기본 FlexMatch 매치메이킹 알고리즘입니다.

  1. FlexMatch는 모든 오픈 매치메이킹 티켓과 채우기 티켓을 티켓 풀에 배치합니다.

  2. FlexMatch는 풀의 티켓을 하나 이상의 배치로 무작위로 그룹화합니다. 티켓 풀이 더 커지면 FlexMatch는 최적의 배치 크기를 유지하기 위해 추가 배치를 구성합니다.

  3. FlexMatch는 각 배치 내에서 연령별로 티켓을 정렬합니다.

  4. FlexMatch는 각 배치에서 가장 오래된 티켓을 기반으로 매치를 구성합니다.

매치 알고리즘을 사용자 지정하려면 규칙 세트 스키마에 algorithm 구성 요소를 추가합니다. 전체 참조 문서에 대해서는 FlexMatch 규칙 세트 스키마 섹션을 참조하세요.

다음과 같은 선택적 사용자 지정을 사용하여 매치메이킹 프로세스의 여러 단계에 영향을 미칠 수 있습니다.

사전 배치 정렬 추가

배치를 구성하기 전에 티켓 풀을 정렬할 수 있습니다. 이러한 유형의 사용자 지정은 티켓 풀이 큰 게임에서 가장 효과적입니다. 사전 배치 정렬은 매치메이킹 프로세스를 가속화하고 정의된 특성에 대한 플레이어 균일성을 높이는 데 도움이 될 수 있습니다.

batchingPreference 알고리즘 속성을 사용하여 사전 배치 정렬 메서드를 정의합니다. 기본 설정은 random입니다.

사전 배치 정렬을 사용자 지정하는 옵션은 다음과 같습니다.

  • 플레이어 속성별로 정렬합니다. 플레이어 속성 목록을 제공하여 티켓 풀을 사전 정렬합니다.

    플레이어 속성별로 정렬하려면 batchingPreferencesorted로 설정하고 sortByAttributes에서 플레이어 속성 목록을 정의합니다. 속성을 사용하려면 먼저 규칙 세트의 playerAttributes 구성 요소에서 속성을 선언해야 합니다.

    다음 예제에서 FlexMatch는 플레이어가 선호하는 게임 맵과 플레이어 기술을 기준으로 티켓 풀을 정렬합니다. 결과 배치에는 동일한 맵을 사용하려는 비슷한 스킬을 갖춘 플레이어가 포함될 가능성이 더 큽니다.

    "algorithm": { "batchingPreference": "sorted", "sortByAttributes": ["map", "player_skill"], "strategy": "exhaustiveSearch" },
  • 지연 시간별로 정렬합니다. 지연 시간이 가장 낮은 매치를 생성하거나 허용 가능한 지연 시간으로 빠르게 매치를 생성합니다. 이 사용자 지정은 40명 이상의 플레이어로 구성된 라지 매치를 구성하는 규칙 세트에 유용합니다.

    알고리즘 속성을 strategy에서 balanced로 설정합니다. 밸런스 전략은 사용 가능한 규칙 문 유형을 제한합니다. 자세한 내용은 FlexMatch 라지 매치 규칙 세트 설계 섹션을 참조하세요.

    FlexMatch는 다음 방법 중 하나로 플레이어가 보고한 지연 시간 데이터를 기반으로 티켓을 정렬합니다.

    • 가장 짧은 지연 시간 위치. 티켓 풀은 플레이어가 가장 짧은 지연 시간 값을 보고한 위치를 기준으로 사전 정렬됩니다. 그런 다음 FlexMatch는 동일한 위치에서 지연 시간이 짧은 티켓을 일괄 처리하여 더 나은 게임 플레이 경험을 제공합니다. 또한 각 배치의 티켓 수가 줄어들어 매치메이킹이 더 오래 걸릴 수 있습니다. 이 사용자 지정을 사용하려면 다음 예와 같이 batchingPreferencefastestRegion으로 설정합니다.

      "algorithm": { "batchingPreference": "fastestRegion", "strategy": "balanced" },
    • 허용 가능한 지연 시간과 빠르게 일치합니다. 티켓 풀은 플레이어가 가장 짧은 지연 시간 값을 보고한 위치를 기준으로 사전 정렬됩니다. 이렇게 하면 더 많은 티켓이 포함된 배치 수가 줄어듭니다. 각 배치에 더 많은 티켓이 포함되므로 적합한 매치를 더 빨리 찾을 수 있습니다. 이 사용자 지정을 사용하려면 다음 예와 같이 batchingPreference 속성을 largestPopulation으로 설정합니다.

      "algorithm": { "batchingPreference": "largestPopulation", "strategy": "balanced" },
    참고

    밸런스 전략의 기본값은 largestPopulation입니다.

채우기 티켓의 우선 순위 지정

게임에서 자동 채우기 또는 수동 채우기를 구현하는 경우 요청 유형에 따라 FlexMatch가 매치메이킹 티켓을 처리하는 방법을 사용자 지정할 수 있습니다. 요청 유형은 새 매치 또는 채우기 요청일 수 있습니다. 기본적으로 FlexMatch는 두 유형의 요청을 동일하게 처리합니다.

채우기 우선 순위는 FlexMatch가 티켓을 일괄 처리한 후 처리하는 방식에 영향을 줍니다. 채우기 우선 순위를 지정하려면 철저한 검색 전략을 사용하는 규칙 세트가 필요합니다.

FlexMatch는 여러 채우기 티켓과 함께 매칭하지 않습니다.

채우기 티켓의 우선 순위를 변경하려면 backfillPriority 속성을 설정하세요.

  • 채우기 티켓을 먼저 매칭합니다. 이 옵션은 새 매치를 만들기 전에 채우기 티켓을 매칭하려고 시도합니다. 즉, 들어오는 플레이어가 기존 게임에 참여할 확률이 더 높습니다.

    게임에서 자동 채우기를 사용하는 경우 이 방법을 사용하는 것이 가장 좋습니다. 자동 채우기는 게임 세션이 짧고 플레이어 교체 시간이 긴 게임에서 주로 사용됩니다. 자동 채우기는 FlexMatch가 빈 슬롯을 채울 더 많은 플레이어를 검색하는 동안 이러한 게임에 최소 실행 가능한 매치를 구성하고 시작할 수 있도록 도와줍니다.

    backfillPriorityhigh로 설정합니다.

    "algorithm": { "backfillPriority": "high", "strategy": "exhaustiveSearch" },
  • 채우기 티켓을 마지막에 매칭합니다. 이 옵션은 다른 모든 티켓을 평가하기 전까지는 채우기 티켓을 무시합니다. 즉, FlexMatch는 들어오는 플레이어를 새 게임에 매칭할 수 없을 때 기존 게임으로 다시 채웁니다.

    이 옵션은 새 매치를 구성할 플레이어가 충분하지 않은 경우와 같이 플레이어를 게임에 참여시키기 위한 마지막 기회로 채우기를 사용하려는 경우에 유용합니다.

    backfillPrioritylow로 설정합니다.

    "algorithm": { "backfillPriority": "low", "strategy": "exhaustiveSearch" },

확장이 있는 이전 티켓 선호

확장 규칙은 매치를 완료하기 어려운 경우 매치 기준을 완화시킵니다. Amazon GameLift는 부분적으로 완료된 매치의 티켓이 특정 연령에 도달하면 확장 규칙을 적용합니다. 티켓 생성 타임스탬프는 Amazon GameLift가 규칙을 적용하는 시기를 결정합니다. 기본적으로 FlexMatch는 가장 최근에 매칭된 티켓의 타임스탬프를 추적합니다.

FlexMatch가 확장 규칙을 적용하는 시기를 변경하려면 다음과 같이 expansionAgeSelection 속성을 설정합니다.

  • 최신 티켓을 기준으로 확장합니다. 이 옵션은 잠재적 매치에 추가된 최신 티켓을 기반으로 확장 규칙을 적용합니다. FlexMatch가 새 티켓을 매칭할 때마다 시간 클록이 재설정됩니다. 이 옵션을 사용하면 매치의 품질이 더 높게 나오지만 매칭하는 데 시간이 더 오래 걸리는 경향이 있습니다. 매칭하는 데 시간이 너무 오래 걸리면 매치 요청이 완료되기까지 시간이 초과될 수 있습니다. 기본적으로 expansionAgeSelectionnewest, newest로 설정됩니다.

  • 가장 오래된 티켓을 기준으로 확장합니다. 이 옵션은 잠재적 매치에 가장 오래된 티켓을 기반으로 확장 규칙을 적용합니다. 이 옵션을 사용하면 FlexMatch는 확장을 더 빠르게 적용하여 가장 먼저 매칭한 플레이어의 대기 시간을 개선하지만 모든 플레이어의 매치 품질을 낮춥니다. expansionAgeSelectionoldest로 설정합니다.

"algorithm": { "expansionAgeSelection": "oldest", "strategy": "exhaustiveSearch" },

플레이어 속성 선언

이 섹션에서는 매치메이킹 요청에 포함할 개별 플레이어 속성을 나열합니다. 규칙 세트에서 플레이어 속성을 선언하는 데에는 두 가지 이유가 있습니다.

  • 규칙 세트에 플레이어 속성에 의존하는 규칙이 포함된 경우.

  • 매치 요청을 통해 플레이어 속성을 게임 세션에 전달하려는 경우. 예를 들어 각 플레이어가 연결하기 전에 플레이어 캐릭터 선택을 게임 세션에 전달하고 싶을 수 있습니다.

플레이어 속성을 선언할 때 다음 정보를 포함합니다.

  • name(필수) - 이 값은 규칙 세트에 대해 고유해야 합니다.

  • type(필수) - 이는 속성 값의 데이터 유형입니다. 유효한 데이터 유형은 숫자, 문자열 또는 문자열 맵입니다.

  • default(선택 사항) - 매치메이킹 요청이 속성 값을 제공하지 않는 경우 사용할 기본값을 입력합니다. 기본값이 선언되지 않고 요청에 값이 포함되지 않은 경우 FlexMatch는 요청을 처리할 수 없습니다.

매치 팀 정의

매치에 대한 팀의 구조 및 크기를 설명합니다. 각 매치에 팀이 하나 이상 있어야 하며 원하는 수의 팀을 정의할 수 있습니다. 팀의 플레이어 수가 동일할 수 있거나 팀이 비대칭일 수 있습니다. 예를 들어 플레이어가 한 명인 몬스터 팀과 플레이어가 10명인 헌터 팀을 정의할 수 있습니다.

FlexMatch에서는 규칙 세트가 팀 크기를 정의하는 방법에 따라 매치 요청을 스몰 매치 또는 라지 매치로 처리합니다. 플레이어 수가 최대 40명인 잠재적 매치는 스몰 매치이며 플레이어 수가 40을 초과하는 매치는 라지 매치입니다. 규칙 세트의 잠재적 매치 크기를 결정하려면 규칙 세트에 정의된 모든 팀에 대한 maxPlayer 설정을 합산합니다.

  • name(필수 항목) - 각 팀에 고유한 이름을 할당합니다. 이 이름은 규칙과 확장, 및 게임 세션의 매치메이킹 데이터에 대한 FlexMatch 참조에서 사용합니다.

  • maxPlayers(필수) - 팀에 할당할 수 있는 최대 플레이어 수를 지정합니다.

  • minPlayers(필수) - 팀에 할당할 수 있는 최소 플레이어 수를 지정합니다.

  • quantity(선택 사항) - 이 정의에 따라 구성할 팀 수를 지정합니다. FlexMatch가 매치를 생성하면 해당 팀에 제공된 이름과 함께 번호가 추가됩니다. 예: Red-Team1, Red-Team2, Red-Team3.

FlexMatch는 최대 플레이어 규모로 팀을 채우려고 하지만 플레이어 수가 적은 팀을 만듭니다. 매치에 참여하는 모든 팀의 크기를 동일하게 하려는 경우 해당 규칙을 생성할 수 있습니다. EqualTeamSizes 규칙의 예제는 FlexMatch 규칙 세트 예제 주제를 참조하세요.

플레이어 매칭에 대한 규칙 설정

매치에 대한 수락을 위해 플레이어를 평가하는 규칙 문 세트를 생성합니다. 규칙은 개별 플레이어, 팀 또는 전체 매치에 적용되는 요구 사항을 설정할 수 있습니다. Amazon GameLift에서 매치 요청을 처리할 때 사용 가능한 플레이어 풀에서 가장 오래된 플레이어부터 시작하고 해당 플레이어에 대한 매치를 빌드합니다. FlexMatch 규칙 생성에 대한 자세한 도움말은 FlexMatch 규칙 유형 섹션을 참조하세요.

  • name(필수) - 규칙 세트에서 규칙을 고유하게 식별하는 유의미한 이름입니다. 규칙 이름은 이 규칙과 관련된 활동을 추적하는 이벤트 로그 및 측정치에서도 참조됩니다.

  • description(선택 항목) - 이 요소는 자유로운 양식의 텍스트 설명을 연결하는 데 사용합니다.

  • type(필수) - 이 type 요소는 규칙을 처리할 때 사용하는 연산을 식별합니다. 각 규칙 유형에는 추가 속성 세트가 필요합니다. FlexMatch 규칙 언어의 유효한 규칙 유형 및 속성 목록을 참조하세요.

  • 규칙 유형 속성(필수 항목일 수 있음) - 정의되는 규칙 유형에 따라 특정 규칙 속성을 설정해야 할 수도 있습니다. FlexMatch 규칙 언어에서 속성 및 FlexMatch 속성 표현식 언어를 사용하는 방법에 대해 자세히 알아봅니다.

시간이 지남에 따라 요구 사항이 완화되도록 허용

확장을 통해 FlexMatch에서 매치를 찾을 수 없는 경우 시간이 지남에 따라 규칙 기준을 완화할 수 있습니다. 이 기능을 사용하면 완벽한 매칭을 할 수 없을 때 FlexMatch를 최대한 활용할 수 있습니다. 확장을 통해 규칙을 완화함으로써 적절한 매치가 있는 플레이어 풀을 점진적으로 확장합니다.

미완료 매치의 최신 티켓 연령이 확장팩 대기 시간과 일치할 때 확장이 시작됩니다. FlexMatch가 매치에 새 티켓을 추가하면 확장 대기 시간 클록이 재설정될 수 있습니다. 규칙 세트 algorithm 섹션에서 확장 시작 방식을 사용자 지정할 수 있습니다.

다음은 매치에 필요한 최소 스킬 레벨을 점진적으로 늘리는 확장의 예입니다. 규칙 세트는 SkillDelta라는 거리 규칙 문을 사용하여 한 매치에 참가하는 모든 플레이어가 서로 5스킬 레벨 이내여야 합니다. 15초 동안 새로운 매치가 이루어지지 않으면 이 확장에서는 10의 스킬 레벨 차이를 찾고 10초 후에는 20의 차이를 찾습니다.

"expansions": [{ "target": "rules[SkillDelta].maxDistance", "steps": [{ "waitTimeSeconds": 15, "value": 10 }, { "waitTimeSeconds": 25, "value": 20 }] }]

자동 채우기가 활성화되어 있는 매치메이커의 경우 플레이어 수 요구 사항을 너무 빨리 완화하지 않습니다. 새 게임 세션이 시작되고 자동 채우기를 시작할 때까지 몇 초 정도의 시간이 걸립니다. 보다 나은 접근 방식은 게임에 대한 자동 채우기가 시작될 조짐이 보인 후에만 확장을 시작하는 것입니다. 확장 타이밍은 팀 구성 요소에 따라 다르므로 테스트를 통해 게임에 가장 적합한 확장 전략을 찾습니다.