mergeПодбор матчей

Быстро начните работу с подбором игроков и изучите примеры сценариев для различных жанров.

Следуйте вместе с этим видео, чтобы начать работу с нашим сервисом Matchmaker:

✔️ Подготовка

Архитектура подбора игроков

В этом руководстве мы сосредоточимся на Matchmaking API и Backfill API.

При подборе игроков существует четыре (4) важных потока данных:

  1. Matchmaking API используется игровыми клиентами для связи с Matchmaker:

    1. для управления группами, назначения серверов и мониторинга,

    2. для измерения пинга с Ping Beacons.

  2. Развертывания API используется для развертывания, масштабирования и управления вашими выделенными серверами с помощью Matchmaker.

  3. Netcode Transports используются для связи между игровыми клиентами и выделенными серверами.

  4. Подробный обзор для замены или добавления игроков на работающий сервер.

circle-info

После релиза, ваш Matchmaker должен работать 24/7 чтобы игроки со всего мира могли подключаться к серверам.

🍀 Простой пример

Начните с простого примера и проверьте базовый поток подбора игроков:

1. Настройка на бесплатном тарифе

☑️ Зарегистрируйте бесплатную учетную запись Edgegaparrow-up-right и откройте страницу панели Matchmakerarrow-up-right.

☑️ Нажмите на Create Matchmaker сначала, затем введите:

  • имя matchmaker — для вашего удобства, например quickstart-dev ,

  • загрузите нашу JSON-конфигурацию Simple Example.

🍀 Simple Example (Минимальная рекомендуемая конфигурация):

triangle-exclamation

Устранение неполадок и FAQ:

☑️ Если ошибок проверки не отображается, нажмите Create and Start и дождитесь завершения процесса. В результате будет запущен новый бесплатный кластер с вашим matchmaker Simple Example.

✅ Теперь вы можете перейти к следующему шагу.

2. Изучение конфигурации

По мере выпуска обновлений Matchmaker каждая новая версия использует семантическое версионирование чтобы наглядно сообщать о влиянии изменений через формат major.minor.patch:

  • 🔥 major версии включают несовместимые изменения и требуют проверки интеграции,

  • 🌟 minor версии включают значительные обратносуместимые улучшения,

  • 🩹 patch версии включают исправления ошибок и небольшие улучшения.

Проверяйте билеты чтобы лучше понимать и отлаживать возможные потоки подбора игроков во время разработки. Мы рекомендуем отключить inspect API для вашего рабочего matchmaker.

Некоторые развертывания могут приводить к ошибкам. Мы пытаемся решить это, автоматически повторяя развертывание до max_deployment_retry_count раз(а) без подтверждения клиента).

Чтобы неожиданные сбои клиента или брошенные билеты не оставались надолго и не занимали ресурсы вашего matchmaker, неподобранные билеты будут отменены после ticket_expiration_period в результате их статус изменится на CANCELLED и затем будут окончательно удалены после ticket_removal_period .

Основа нашей логики подбора игроков настраивается в Профили (очереди). Каждый профиль — это полностью изолированная очередь подбора игроков, указывающая на Приложения и версии с заранее заданным количеством необходимых ресурсов CPU и памяти (RAM).

Правила в начальном наборе правил должны быть выполнены, чтобы игроки были сгруппированы вместе; каждое определяется тремя свойствами:

  • имя на ваш выбор, например - размер матча,

  • тип правила, также известный как оператор, например - player_count,

  • и наконец атрибуты оператора, например team_count или max_team_size.

Правило количества игроков

Это специальное правило, определяющее, сколько игроков должно совпасть, чтобы инициировать назначение:

  • team_count относится к числу команд; 1 команда может использоваться для кооперативных режимов или режима каждый сам за себя,

  • min_team_size относится к минимальному числу игроков в команде.

  • max_team_size относится к максимальному числу игроков в команде.

Наш простой пример демонстрирует кооперативную игру с 2 игроками.

circle-exclamation

Правило задержек

✅ Теперь вы можете перейти к следующему шагу.

3. Просмотр сведений об экземпляре

☑️ Просмотрите сведения о вашем новом matchmaker в панели управления после его инициализации:

  • Статус указывает на состояние сервиса и может быть ONLINE, OFFLINE или ERROR.

  • Идентификатор помогает сотрудникам Edgegap быстро найти ваш matchmaker, если вам понадобится помощь в устранении неполадок.

  • Запущено в может быть полезно для определения времени последнего обновления.

  • Размер соответствует одному из наших тарифных плановarrow-up-right.

  • API URL будет использоваться игровыми клиентами и игровыми серверами для связи с вашим matchmaker.

  • Swagger URL — это удобный GUI спецификации openAPI, который мы предоставляем для изучения схемы API.

  • Auth Token — это уникальный секретный токен, используемый игровыми клиентами и игровым сервером для аутентификации.

triangle-exclamation

Чтобы протестировать ваш новый matchmaker, вам понадобятся Swagger URL, API URL и Auth Token.

✅ Теперь вы можете перейти к следующему шагу.

circle-info

Чтобы обновить правила вашего matchmaker в процессе разработки, измените конфигурацию и перезапустите его.

circle-check

4. Тестирование Tickets API

circle-info

Пожалуйста, подождите до 5 минут после запуска вашего matchmaker, чтобы завершилась DNS-пропагация.

☑️ Сначала откройте ваш Swagger URL чтобы просмотреть схему openAPI в GUI swagger:

☑️ Нажмите на Authorize 🔒, вставьте ваш Auth Tokenи подтвердите, нажав Authorize.

☑️ Прокрутите вниз до Ticket API - POST /tickets, разверните и нажмите Try it out.

☑️ Предварительно просмотрите ваш запрос:

  • обратите внимание player_ip установлен в null — это заставит Matchmaker использовать IP-адрес, автоматически добавленный в ваш запрос (см. Сервер к серверу для альтернатив),

  • profile относится к вашему Профили (очереди),

  • attributes включают значения для правил вашего matchmaker, в данном случае для правила latencies ,

    • rule player_count — это единственное правило, которое не требует никаких атрибутов в билетах игроков.

☑️ Нажмите Execute и просмотрите ответ на запрос билета игрока:

☑️ Создайте второй билет, нажав Execute снова, чтобы наши два игрока совпали и был запущен сервер.

☑️ Сверните POST /tickets и откройте GET /tickets/{ticketId}, затем нажмите Try it out.

☑️ Введите ID билета из ответа на предыдущем шаге и нажмите Execute.

☑️ Просмотрите обновленное назначение для вашего билета игрока:

  • статус изменился на MATCH_FOUND сначала, при этом сохраняя assignment установлен в null чтобы показать, что игроки совпали и сервер назначается,

☑️ Нажмите Execute снова, чтобы проверить ваш билет, и просмотрите обновленное назначение для вашего билета:

  • статус изменился на HOST_ASSIGNED с assignment содержащим сведения о назначенном сервере.

chevron-rightУстранение неполадок и FAQhashtag

Мой билет застрял в SEARCHING .

  • Пожалуйста, проверьте, что вы создали достаточное количество билетов с пересекающимися критериями, соответствующими вашей конфигурации.


Мой билет застрял, переключаясь между MATCH_FOUND и TEAM_FOUND повторно.

  • Учетные записи Free Tier ограничены 1 развертыванием одновременно. Рассмотрите возможность обновления тарифа или остановите текущее развертывание, чтобы запустить новое.


Мой билет сразу переходит в CANCELLED.

  • Срок действия вашего билета истек. Создайте новый билет или увеличьте период истечения в вашей конфигурации для тестирования.


Я получаю HTTP 404 Not Found при проверке моего билета.

  • Ваш билет был удален либо запросом DELETE, либо по достижении периода удаления (начинается после истечения срока действия билета и определяется в вашей конфигурации). Создайте новый билет или увеличьте периоды истечения/удаления в вашей конфигурации для тестирования.

☑️ Просмотрите ваше новое развертывание в нашей панели управленияarrow-up-right:

  • обратите внимание, что каждое развертывание помечено всеми ID билетов и профилем для дополнительной отслеживаемости.

☑️ Попробуйте подключиться из вашего игрового клиента к назначенному серверу.

circle-exclamation

☑️ Когда вы убедитесь, что можете без проблем подключиться к вашему развертыванию и закончите тестирование, Остановите ваше развертывание чтобы освободить ресурсы в вашей учетной записи для следующей сборки.

✅ Теперь вы можете перейти к следующему шагу.

circle-info

Найдите спецификацию openAPI для тестирования по адресу {matchmaker-url}/swagger/v1/swagger.json.

5. Интеграция игры

Matchmaker интегрируется с:

☑️ В Игровым клиентом, мы рекомендуем предоставлять игрокам обновления статуса билета с помощью внутриигрового интерфейса для наилучшего игрового опыта. См.:

☑️ В Игровым клиентом, убедитесь, что вы обрабатываете повторяемые 429 Too Many Requests ошибки с экспоненциальной задержкой и повторной попыткой, давая matchmaker время восстановиться во время резких всплесков трафика.

☑️ В Игровым клиентом, убедитесь, что вы обрабатываете неповторяемые ошибки:

  • 404 Not Found — билет был удален,

  • 500 Internal Server Error — временный сбой сервиса.

☑️ В Игровой сервер, считывать предпочтения игроков и начальный контекст сервера:

  1. Injected Variables (Matchmaker) чтобы получить начальные данные подбора игроков для игроков.

  2. Injected Variables (App Versions) для параметров версии, настроек и секретов.

  3. Injected Variables (Deployment) для информации о развертывании, IP, местоположении и т. д...

☑️ После подключения игроков, Игровой сервер и игровые клиенты запускают сцену загрузки — 3D-сцену, социальный UI в стиле лобби или экран загрузки с индикатором прогресса, чтобы показать, что инициализация продолжается.

☑️ Убедитесь, что ваше развертывание будет остановленоarrow-up-right корректно после завершения матча.

🙌 Поздравляем, вы завершили интеграцию Matchmaking! Чтобы узнать больше, продолжайте читать.

🏁 Продвинутый пример

Полноценная конфигурация, использующая все функции подбора игроков, включая Профили (очереди), Правилаи Подробный обзор может выглядеть так:

🎾 Пользовательский лобби

Пользовательские лобби (приватные лобби, sandbox-уровни) — очень популярный вариант для игры на одном устройстве и тестирования новых функций в играх до того, как они попадут в основные игровые режимы. Обычно требуют наименьшего количества ограничений, но при этом нужно обеспечить, чтобы игроки могли Подробный обзор.

circle-info

Для приватных лобби без публичного доступа установите "team_size": 1 и пусть владелец группы запускает игру в одиночку. Владелец может передать сведения о группе и назначенном хосте любому числу участников, чтобы они могли присоединиться.

circle-check

🥛 Демонстрация Backfill

Опираясь на Подбор матчейэта конфигурация демонстрирует Backfill с Группы.

⚔️ Соревновательные игры

Соревновательные игры сосредоточены на том, чтобы игроки состязались друг с другом за победу, будь то как отдельные игроки (free for all) или как команды. Обеспечьте честные и сбалансированные матчи, подбирая игроков или команды со схожим уровнем навыков, и поддерживайте темп игры, быстро находя честных соперников.

Вы можете определить несколько команд по 1 или более игроков в каждой, например:

Режим игры
Количество команд
Размер команды
Всего игроков

5v5 FPS

2

5

10

5v5 MOBA

2

5

10

20x3 Battle Royale

20

3

60

10p Free For All

1

10

10

Определите несколько Профили (очереди) для правил и настроек, специфичных для игрового режима, и расширяйте по мере необходимости.

  • Для всех матчей:

    • ограничьте задержку подбора игроков чтобы не подбирать игроков слишком далеко друг от друга,

    • Подробный обзор для заранее собранных групп и чтобы не превышать размеры команд,

    • постепенно ослабляйте ограничения по задержке со временем, чтобы находить больше игроков,

    • выделяйте больше CPU или памяти с помощью разных Приложения и версии для конкретных профилей,

  • Для казуальных матчей:

    • уберите ограничения по рангу, чтобы максимизировать скорость подбора и коэффициент заполнения матчей,

    • позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую для всех,

    • укажите размер группы backfill, чтобы заменять вышедших игроков, не превышая размеры команд,

    • снимите ограничения по задержке, чтобы гарантировать матч через 3 минуты (180 с) ожидания в очереди.

  • Для соревновательных матчей:

    • ограничьте ранг, чтобы допускать только соперников со схожим уровнем навыков,

    • используйте ранги повышения или понижения, чтобы подбирать игроков на крайних уровнях лиги.

  • Для топ-1% матчей высокого уровня (челленджеры):

    • используйте числовые рейтинги навыка (ELO), чтобы получить точный контроль над распределением навыков в матчах,

    • ждите дольше, прежде чем ослаблять требования к задержке, из-за меньшего количества игроков.

circle-check

🤝 Кооперативные игры

Кооперативные игры требуют, чтобы игроки работали вместе как команда для достижения общей цели или против ИИ-соперника. Сопоставляйте игроков со схожими предпочтениями и игровыми привычками. Заменяйте ушедших игроков и улучшайте Ping Beacons чтобы обеспечить отзывчивый игровой опыт.

При количестве команд 1 и максимальном размере команды 4, требуется до 4 игроков на матч.

Определите несколько Профили (очереди) для правил и настроек, специфичных для игрового режима:

  • начинайте минимум с 4 игроков, чтобы удерживать игроков в очереди и максимизировать коэффициент заполнения матча,

  • ограничьте задержку подбора игроков чтобы не подбирать игроков слишком далеко друг от друга,

  • позвольте игрокам выбирать определенную сложность игры, подходящую для уровня навыков каждого,

  • позвольте игрокам указывать предпочтения по карте, чтобы найти карту, подходящую для всех,

  • ограничьте разницу в уровнях игроков, чтобы требовать схожий уровень прогресса в игре,

  • укажите размер группы backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,

  • используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей аудитории,

  • Подробный обзор для заранее собранных групп и чтобы заполнять команды, не превышая емкость сервера,

  • выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.

Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрые матчи:

  • ослабляйте ограничения по задержке со временем, чтобы находить больше игроков,

  • увеличивайте допустимую разницу в уровнях игроков, чтобы находить больше игроков,

  • уменьшайте минимальный размер команды, чтобы требовалось меньше игроков и игра начиналась раньше,

    • сервер может заполнять пустые слоты ИИ-напарниками,

    • или Подробный обзор чтобы добавить игроков позже,

  • установите минимальный размер команды 1, чтобы запускать игру в одиночку после 150 с ожидания в очереди

🎈 Социальные игры

Социальные игры сосредоточены на построении связей и отношений между игроками через сотрудничество, общение и общий опыт. Поддерживайте большое количество игроков, максимизируйте коэффициент заполнения матча и учитывайте предпочтения и игровые привычки игроков. Заменяйте ушедших игроков и обеспечьте высокое Ping Beacons чтобы обеспечить отзывчивый игровой опыт.

При количестве команд 1 (free for all) и максимальном размере команды 50, требуется до 50 игроков на матч.

Определите Профили (очереди) для правил и настроек, специфичных для игрового режима:

  • ограничьте задержку подбора игроков чтобы не подбирать игроков слишком далеко друг от друга,

  • позвольте игрокам указывать предпочтения по режиму игры и находить режим, подходящий для всех,

  • укажите размер группы backfill, чтобы заменять вышедших игроков, не превышая емкость сервера,

  • используйте флаги модерации, чтобы отделять игроков с низкой кармой и читеров от общей аудитории,

  • Подробный обзор для заранее собранных лобби или чтобы заполнять команды, не превышая емкость сервера,

  • выделяйте больше CPU или памяти, используя разные Приложения и версии для других профилей.

Начните с идеальных условий и расширяйте ограничения чтобы обеспечить быстрые матчи:

  • ослабляйте ограничения по задержке со временем, чтобы находить больше игроков,

  • постепенно уменьшайте минимальный размер команды, чтобы требовалось меньше игроков и игра начиналась раньше,

    • сервер может заполнять пустые слоты ИИ-игроками,

    • или Подробный обзор чтобы добавить игроков позже,

  • установите минимальный размер команды 1, чтобы запускать игру в одиночку после 150 с ожидания в очереди.

Последнее обновление

Это было полезно?