다음을 통해 공유


매치 메이킹 시나리오와 구성의 예

개요

대기 목록 및 규칙 시스템은 많은 시나리오를 처리 할 수 있는 유연성을 제공합니다. 다음은 보다 일반적인 매치 메이킹 사용 사례 및 관련 대기 목록의 예입니다. 이들 각각은 PlayFab API를 통해 직접 제출할 수 있습니다. 이 옵션은 게임 관리자 UI를 통해 설정할 수도 있습니다.

사용자의 첫 대기 목록 또는 "빠른 매치"

모든 타이틀은 기본 흐름을 알아보기 위해 이 간단한 대기 목록으로 시작해야 합니다. 이 대기 목록은 두 명의 플레이어가 함께 일치하며, 플레이어를 매치시키기 위해 동일한 빌드 문자열을 전달해야 하는 하나의 선택적 규칙을 포함합니다. 빌드가 지정되지 않은 경우 플레이어는 빌드에 관계없이 이 대기 목록의 다른 플레이어와 매치될 수 있습니다.

"MatchmakingQueue": {
    "Name": "MyFirstQueue",
    "MinMatchSize": 2,
    "MaxMatchSize": 2,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "StringEqualityRule",
            "Attribute": {
                "Path": "Build",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "BuildVersionRule"
        }
    ]
}

다중 게임 모드

타이틀에는 흔히 게임을 하는 여러 가지 방법이 있습니다. 이 플레이어들이 서로 매치되어서는 안될 경우 별도의 대기 목록에 배치하면 성능이 최적화됩니다.

{
    "MatchmakingQueue": {
        "Name": "FreeForAllQueue",
        "MinMatchSize": 4,
        "MaxMatchSize": 4,
        "ServerAllocationEnabled": false,
        "Rules": [
        ]
    }
}
{
    "MatchmakingQueue": {
        "Name": "CaptureTheFlagQueue",
        "MinMatchSize": 4,
        "MaxMatchSize": 4,
        "ServerAllocationEnabled": false,
        "Rules": [
        ]
    }
}

플레이어를 게임 모드에서 다른 플레이어와 매치시키려는 경우 하나의 대기 목록을 사용하고 교집합 규칙을 설정합니다. 플레이어는 여러 게임 모드를 지정할 수 있으며 규칙은 모든 플레이어가 적어도 하나의 공통 게임 모드를 포함하는 경우로 매치를 제한합니다.

참고 항목

이 기능을 제대로 수행하려면 여러 모드에서 재생하는 플레이어 수가 동일해야 합니다.

{
    "MatchmakingQueue": {
        "Name": "MultiGameModeSearchQueue",
        "MinMatchSize": 4,
        "MaxMatchSize": 4,
        "ServerAllocationEnabled": false,
        "Rules": [
        {
                "Type": "SetIntersectionRule",
                "MinIntersectionSize": 1,
                "Attribute": {
                    "Path": "GameMode",
                    "Source": "User"
                },
                "AttributeNotSpecifiedBehavior": "MatchAny",
                "Weight": 1,
                "Name": "GameModeRule"
            }
        ]
    }
}

확장된 기술 기반의 모든 무료 게임

매우 일반적인 시나리오는 기술을 기반으로 플레이어를 매치하려고 시도하는 것입니다. 이 예에서 대기 목록은 플레이어의 스킬 속성이 0.2 이내이고 시간이 지남에 따라 이러한 속성이 0.5로 증가합니다. 30초 이상 대기하는 티켓의 경우 스킬 차이가 허용됩니다.

이 예의 값은 사용 가능한 스킬의 범위가 0과 1사이라고 가정하여 선택되었습니다. 이 값은 플레이어의 스킬을 추적하는 데 사용되는 값의 범위와 일치 속도에 따라 그리고 스킬에 얼마나 중점을 두느냐에 따라 조정해야 합니다.

그에 더해 30초에 옵션이 되는 규칙은 전혀 플레이하지 않는 것보다 스킬의 균형이 맞지는 않지만 그래도 게임을 하는 편이 나은 게임을 위한 것입니다. 균형이 맞지 않는 것이 불가능한 환경인 경우, 그런 게임의 옵션은 SecondsUntilOptional 조정될 수 있습니다. 완전히 제거된 경우 규칙이 무기한 활성 상태로 유지됩니다.

"MatchmakingQueue": {
    "Name": "SkillBasedFreeForAllQueue",
    "MinMatchSize": 4,
    "MaxMatchSize": 4,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "DifferenceRule",
            "Difference": 0.2,
            "MergeFunction": "Average",
            "DefaultAttributeValue": 0.5,
            "Expansion": {
                "Delta": 0.1,
                "Limit": 0.5,
                "Type": "Linear",
                "SecondsBetweenExpansions": 5
            },
            "Attribute": {
                "Path": "Skill",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "UseDefault",
            "Weight": 1,
            "Name": "SkillRule",
            "SecondsUntilOptional": 30
        }
    ]
}

사용자가 지정하는 확장

확장은 각 시간 간격에서 임의의 값을 사용하도록 사용자가 지정할 수 있습니다. 예를 들어, 허용된 스킬을 시작할 때는 느리게 커지되 점점 시간이 지남에 따라 빠른 속도로 커지게 할 수 있습니다.

"MatchmakingQueue": {
    "Name": "SkillBasedFreeForAllCustomExpansionQueue",
    "MinMatchSize": 4,
    "MaxMatchSize": 4,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "DifferenceRule",
            "Difference": 0.2,
            "MergeFunction": "Average",
            "DefaultAttributeValue": 0.5,
            "Expansion": {
                "DifferenceOverrides": [
                    0.025,
                    0.05,
                    0.1,
                    0.2,
                    0.3,
                    0.5
                ],
                "Type": "Custom",
                "SecondsBetweenExpansions": 5
            },
            "Attribute": {
                "Path": "Skill",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "UseDefault",
            "Weight": 1,
            "Name": "SkillRule",
            "SecondsUntilOptional": 30
        }
    ]
}

시간 경과에 따른 플레이어 수의 확장

일부 타이틀은 전체 경기가 시작되는 것을 선호하지만 시간이 지남에 따라 점점 더 적은 수의 사람들로도 가능할 수 있습니다. 하나의 예가 배틀 로얄 (Battle Royale) 스타일의 게임으로, 50 명의 플레이어부터 시작하는 것이 바람직하지만 어느 정도 시간이 지나면 그보다 적은 수의 사람으로도 플레이가 가능합니다.

MinMatchSizeMaxMatchSize는 확장을 포함하지 않으므로 MatchTotalRule을 사용하여 일치에 필요한 플레이어의 수를 수정할 수 있습니다. 각 플레이어는 연관된 속성에 대해 1의 값을 지정하고 규칙은 이들을 합쳐서 시간이 지남에 따라 변경되는 일치 항목의 플레이어 수에 대한 요구 사항을 시행합니다.

참고 항목

MaxOverrides 또는 MinOverrides 배열을 지정하지 않으면, 규칙의 원래 Max 또는 Min 값이 대신 사용됩니다.

"MatchmakingQueue": {
    "Name": "PlayerExpansionOverTime",
    "MinMatchSize": 8,
    "MaxMatchSize": 50,
    "ServerAllocationEnabled": false,
    "Rules": [
        {
            "Type": "MatchTotalRule",
            "Attribute": {
                "Path": "PlayerCount",
                "Source": "User"
            },
            "Min": 8,
            "Max": 50,
            "Weight": 1,
            "Expansion": {
                "MinOverrides": [
                    50,
                    45,
                    40,
                    35,
                    25,
                    16,
                    8
                ],
                "Type": "Custom",
                "SecondsBetweenExpansions": 10
            },
            "Name": "PlayersRequiredRule",
            "SecondsUntilOptional": 60
        }
    ],
}

표준 4v4 스타일 스킬 기반

PlayFab 매치 메이킹은 팀 중심의 경기를 지원합니다. 팀을 지정하면 동일한 티켓에 함께 제출된 플레이어는 모두 한 팀으로 배정되고 서로 대결을 할 필요가 없습니다.

PlayFab 매치 메이킹은 팀 간의 균형을 유지하는 데 도움이 되는 다양한 팀 규칙을 지원합니다. 아래에 보여지는 예는 4v4 경기에 대한 것으로, 플레이어의 스킬의 균형을 보장합니다.

"MatchmakingQueue": {
    "Name": "Standard4v4TeamsQueue",
    "MinMatchSize": 8,
    "MaxMatchSize": 8,
    "ServerAllocationEnabled": false,
    "Teams": [
        {
            "Name": "Red",
            "MinTeamSize": 4,
            "MaxTeamSize": 4
        },
        {
            "Name": "Blue",
            "MinTeamSize": 4,
            "MaxTeamSize": 4
        }
    ],
    "Rules": [
        {
            "Type": "TeamDifferenceRule",
            "Attribute": {
                "Path": "Skill",
                "Source": "User"
            },
            "Difference": 0.2,
            "DefaultAttributeValue": 0.5,
            "Expansion": {
                "Delta": 0.1,
                "Limit": 0.5,
                "Type": "Linear",
                "SecondsBetweenExpansions": 5
            },
            "Name": "TeamSkillRule",
            "SecondsUntilOptional": 30
        }
    ]
}

멀티 플레이어 서버

대기 목록은 자동으로 PlayFab의 멀티 플레이 서버 기능을 제공하고, 서버 할당 및 일치하는 플레이어 목록을 제공합니다. 이 대기 목록는 서버의 어떤 빌드가 시작되어야 하는지를 나타내는BuildId와 함께 ServerAllocationEnabled 플래그와 같은 설정의 가장 작은 예제를 제공합니다.

ServerAllocationEnabled 플래그가 true로 설정되면 각 일치에 대해 서버를 할당해야 하는 위치를 나타내는RegionSelectionRule도 필요합니다.

"MatchmakingQueue": {
    "Name": "MultiplayerServersQueue",
    "MinMatchSize": 24,
    "MaxMatchSize": 24,
    "ServerAllocationEnabled": true,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Rules": [
        {
            "Type": "RegionSelectionRule",
            "MaxLatency": 200,
            "Path": "Latency",
            "Weight": 1,
            "Name": "RegionSelectionRule"
        }
    ]
}

Big Team Battle (12 vs 12)

더 큰 팀 게임에는 추가 요구 사항이 있을 수 있습니다. 이 예에서 대기 목록은 멀티 플레이어 서버를 만들기 위해 구성되며,이 멀티 플레이어 서버는 해딩 많은 플레이어로 게임을 관리해야 하는 경우가 대부분입니다. 그건 위의 예와 비슷합니다.

기술 외에도 다른 팀 규칙이 팀 유사성을 높이기 위해 추가되어 각 팀마다 한 팀만 허용되며 Premade 팀의 공통된 상황이 대규모 플레이어 무작위 대결에 매치되지 않도록 합니다.

"MatchmakingQueue": {
    "Name": "LargeTeamsQueue",
    "MinMatchSize": 24,
    "MaxMatchSize": 24,
    "ServerAllocationEnabled": true,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Teams": [
        {
            "Name": "Red",
            "MinTeamSize": 12,
            "MaxTeamSize": 12
        },
        {
            "Name": "Blue",
            "MinTeamSize": 12,
            "MaxTeamSize": 12
        }
    ],
    "Rules": [
        {
            "Type": "TeamTicketSizeSimilarityRule",
            "Name": "PreventLargePremadeVersusRandomsRule",
            "SecondsUntilOptional": 20
        },
        {
            "Type": "TeamDifferenceRule",
            "Attribute": {
                "Path": "Skill",
                "Source": "User"
            },
            "Difference": 0.1,
            "DefaultAttributeValue": 0.5,
            "Expansion": {
                "Delta": 0.1,
                "Limit": 0.5,
                "Type": "Linear",
                "SecondsBetweenExpansions": 5
            },
            "Name": "TeamSkillRule",
            "SecondsUntilOptional": 30
        },
        {
            "Type": "RegionSelectionRule",
            "MaxLatency": 200,
            "Path": "Latency",
            "Weight": 1,
            "Name": "RegionSelectionRule"
        }
    ]
}

배틀 로얄(Battle Royale)

배틀 로얄(Battle Royale) 게임은 많은 사람들을 아레나에 배치합니다. 이 예에서 게임은 네 팀으로 구성됩니다. 현재 이와 같이 팀 시나리오가 허용하는 플레이어는 32명으로 제한되었습니다. 향후 이 제한 사항은 개선될 것입니다.

이 예에는 전용 서버에 대한 멀티 플레이어 서버 설정 정보도 포함되어 있습니다.이 정보는 대개 많은 수의 플레이어가 있는 게임에 필요합니다. 그건 위에 보여지는 예와 비슷합니다.

    "MatchmakingQueue": {
        "Name": "BattleRoyaleStyleQueueWithTeams",
        "MinMatchSize": 32,
        "MaxMatchSize": 32,
        "ServerAllocationEnabled": true,
        "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
        "Teams": [
            {
                "Name": "team1",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team2",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team3",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team4",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team5",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team6",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team7",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            },
            {
                "Name": "team8",
                "MinTeamSize": 4,
                "MaxTeamSize": 4
            }
        ],
        "Rules": [
            {
                "Type": "RegionSelectionRule",
                "MaxLatency": 200,
                "Path": "Latency",
                "Weight": 1,
                "Name": "RegionSelectionRule"
            }
        ]
    }

교차-장치/교차 플랫폼

특정 장치 또는 플랫폼의 게임을 서로 일치하도록 제한하려면 문자열 동일성 규칙으로 장치를 지정해야 합니다. MatchAny의 AttributeNotSpecifiedBehavior를 사용하면 이러한 장치를 지정하지 않은 티켓은 모든 장치/플랫폼과 일치하도록 선택할 수 있습니다. 매치 메이킹 시간이 예상보다 긴 경우 교차 플레이를 지원하기 위해 필요한 경우 플랫폼 간 큐를 사용하여 플랫폼별로 별도의 큐를 만드는 것이 좋습니다.

"MatchmakingQueue": {
    "Name": "CrossDeviceQueue",
    "MinMatchSize": 32,
    "MaxMatchSize": 32,
    "ServerAllocationEnabled": false,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Rules": [
        {
            "Type": "StringEqualityRule",
            "Attribute": {
                "Path": "DeviceType",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "CrossDeviceRule"
        }
    ]
}

호스트/검색 프로그램 또는 역할 기반 요구 사항

PlayFab 매치는 게임 호스트가 미리 선택되지 않은 티켓 기반 매칭 시스템을 사용합니다. 그러나 MatchTotalRule 을 사용하여 호스트 검색 프로그램 시스템을 에뮬레이션하여 일치하는 호스트의 수를 제한할 수 있습니다.

1을 지정하여 호스트인 경우 티켓을 미리 지정할 수 있습니다. 각 매치에는 정확히 하나의 호스트가 있어야 합니다.

참고 항목

호스트 수가 검색자를 크게 초과하거나 그 반대의 경우, 모든 플레이어의 매치 메이킹 시간이 느려질 수 있습니다. 매치 메이킹 디자인의 의미를 고려하여 지정된 하위 모집단에 매치 메이킹 규칙과 원하는 평균 매치 시간을 충족할 수 있는 충분한 플레이어가 있는지 확인합니다.

"MatchmakingQueue": {
    "Name": "HostSearcherQueue",
    "MinMatchSize": 8,
    "MaxMatchSize": 8,
    "ServerAllocationEnabled": false,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Rules": [
        {
            "Type": "MatchTotalRule",
            "Attribute": {
                "Path": "IsHost",
                "Source": "User"
            },
            "Min": 1,
            "Max": 1,
            "Weight": 1,
            "Name": "OneHostRule"
        }
    ]
}

게임에는 역할 요구 사항이 있을 수 있습니다. 예를 들어 어떤 게임에는 드러머 1명, 기타리스트 2명, 보컬 1명이 필요할 수 있습니다. 탱크 한 명, DPS 두 명, 지원 한 명일 수 도 있습니다. 게임은 MatchTotalRule을 사용하여 아래와 같은 역할을 요구할 수도 있습니다.

"MatchmakingQueue": {
    "Name": "RoleBasedQueue",
    "MinMatchSize": 4,
    "MaxMatchSize": 4,
    "ServerAllocationEnabled": false,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Rules": [
        {
            "Type": "MatchTotalRule",
            "Attribute": {
                "Path": "TankSelected",
                "Source": "User"
            },
            "Min": 1,
            "Max": 1,
            "Weight": 1,
            "Name": "TankRule"
        },
        {
            "Type": "MatchTotalRule",
            "Attribute": {
                "Path": "DPSSelected",
                "Source": "User"
            },
            "Min": 2,
            "Max": 2,
            "Weight": 1,
            "Name": "DPSRule"
        },
        {
            "Type": "MatchTotalRule",
            "Attribute": {
                "Path": "SupportSelected",
                "Source": "User"
            },
            "Min": 1,
            "Max": 1,
            "Weight": 1,
            "Name": "SupportRule"
        }
    ]
}

다양한 중요성을 가진 규칙

규칙은 어떤 티켓을 다른 티켓과 매치할 수 있는지 제한하고 티켓을 선택하는 순서를 선택하여 매치메이킹를 안내합니다. 여러 규칙이 있는 경우 모든 제한 사항이 고려됩니다. 그러나 타이틀은 남아있는 적합한 티켓보다 규칙의 우선 순위에 우선권을 부여할 수 있습니다.

아래 예에서 플레이어는 기술 및 경험 레벨에 있어야 합니다. 그러나 지정된 스킬과 경험 범위 내에 많은 티켓이 있는 경우이 대기 목록은 경험 레벨에 가까운 티켓보다 스킬에 더 가까운 티켓을 선호합니다.

제한에 부합하는 티켓을 평가할 때 경험 차이만큼 스킬 차이가 3배로 계산됩니다.

"MatchmakingQueue": {
    "Name": "WeightingQueue",
    "MinMatchSize": 4,
    "MaxMatchSize": 4,
    "ServerAllocationEnabled": false,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Rules": [
        {
            "Type": "DifferenceRule",
            "Difference": 1,
            "MergeFunction": "Average",
            "Attribute": {
                "Path": "skill",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 3,
            "Name": "SkillRule"
        },
        {
            "Type": "DifferenceRule",
            "Difference": 5,
            "MergeFunction": "Average",
            "Attribute": {
                "Path": "experience",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "ExperienceRule"
        }
    ]
}

DLC 팩

다양한 DLC 팩으로 SetIntersectionRule를 사용하여 매치되는 DLC가 있는 다른 플레이어만 찾을 수 있습니다. 각 플레이어는 자신이 소유한 DLC 팩을 전달하며 적어도 하나의 DLC 팩을 공유하려면 그룹이 필요합니다.

참고 항목

.30초가 지난 후에 규칙은 선택 사항이 되며 플레이어는 DLC를 공유하지 않고도 매치하도록 허용합니다.

"MatchmakingQueue": {
    "Name": "DlcQueue",
    "MinMatchSize": 4,
    "MaxMatchSize": 4,
    "ServerAllocationEnabled": false,
    "BuildId": "6a4d2760-4295-417e-b149-0a12e3570d94",
    "Rules": [
        {
            "Type": "SetIntersectionRule",
            "MinIntersectionSize": 1,
            "Attribute": {
                "Path": "DlcPacks",
                "Source": "User"
            },
            "AttributeNotSpecifiedBehavior": "MatchAny",
            "Weight": 1,
            "Name": "DlcRule",
            "SecondsUntilOptional": 30
        }
    ]
}

통계 활성화

통계를 사용하면 제목에 대기 목록에 대한 정보를 표시할 수 있습니다. 이 정보는 그들이 원하는 게임 모드를 선택할 때 플레이어의 기대치를 설정하는 데 유용할 수 있습니다.

반대로 타이틀은 비즈니스 인텔리전스를 위해 또는 플레이어를 트래픽이 많은 대기 목록으로 보내는 것을 피하기 위해 해당 정보를 숨길 수 있습니다.

아래의 대기 목록을 사용하면 대기 목록에 있는 플레이어의 수와 티켓이 매치하는 데 필요한 예상 시간을 볼 수 있습니다.

참고 항목

서버는 항상 이 정보를 검색할 수 있습니다. 아래 보여지는 구성은 사용자가 이 호출을 할 수 있는지 여부만 제어합니다.

"MatchmakingQueue": {
    "Name": "StatisticsEnabledQueue",
    "MinMatchSize": 8,
    "MaxMatchSize": 8,
    "ServerAllocationEnabled": false,
    "Rules": [],
    "StatisticsVisibilityToPlayers": {
        "ShowNumberOfPlayersMatching": true,
        "ShowTimeToMatch": true
    }
}