Матчмейкер Unity
Это руководство поможет вам создать проект Unity с использованием системы Advanced Matchmaker от Edgegap для автоматизации развертываний и соединений между игроками.
В этом руководстве будет использован открытый пример проекта Tanks, доступно в Mirror примере в разделе Assets/Mirror/Examples/Tanks. Окончательный пример можно найти на нашей GitHub.
Настройка Matchmaker
Создайте компоненты
Для начала вам нужно создать 3 компонента Matchmaker. Для этого проекта вы можете следовать нашему базовому руководству по компонентам здесь.
Имейте в виду, что компоненты и конфигурация YAML, созданные по этому руководству, не предназначены для использования в продакшене.
Релиз
Локально
Если вы хотите протестировать Matchmaker в локальной среде, просто примените настройки Kubernetes, как упоминалось в конце базового руководства по компонентам. Затем вы можете перейти к разделу настройка проекта.
С Edgegap
Если вы хотите протестировать Matchmaker в онлайн-среде с Edgegap, вам нужно немного изменить ваши компоненты из предыдущего руководства. Вы будете использовать внедрённые переменные, которые добавляются во время релиза, вместо некоторых жёстко заданных значений. Изменения должны быть следующими:
Director
...
using System;
namespace director
{
public static class Constant
{
static Constant()
{
OpenMatchMatchFunctionHost = Environment.GetEnvironmentVariable("OM_MMF_HOST");
OpenMatchMatchFunctionPort = Int32.Parse(Environment.GetEnvironmentVariable("OM_MMF_HTTP_PORT"));
OpenMatchBackendService = Environment.GetEnvironmentVariable("OM_BACKEND_HOST") + ':' + Int32.Parse(Environment.GetEnvironmentVariable("OM_BACKEND_HTTP_PORT"));
}
public static readonly string OpenMatchMatchFunctionHost;
public static readonly int OpenMatchMatchFunctionPort;
public static readonly string OpenMatchBackendService;
...
}
...
}Frontend
Match Function
После этого загрузьте их в Edgegap, затем создайте и выпустите ваш Matchmaker на панели управления Edgegap.
Настройка проекта
Далее мы хотим изменить базовый проект Tank так, чтобы для соединения игроков использовался Matchmaker. В рамках этого примера мы хотим, чтобы наши игроки выбирали режим матча, в который они хотят играть, до создания тикета Matchmaker, чтобы Matchmaker автоматически соединял 2 игроков, выбравших один и тот же режим.
С базовыми компонентами Matchmaker, созданными по предыдущему руководству, доступные режимы: mode.casual, mode.ranked, и mode.private.
В проекте откройте сцену, расположенную в Assets/Mirror/Examples/Tanks/Scenes. Отключите Network Manager HUD Relay GUI NetworkManager объект gameObject, затем создайте свой собственный HUD, чтобы позволить игрокам вводить игровой режим, создавать и удалять тикет, когда они не находятся в матче, и выходить из текущего матча, когда находятся в нём.
Оффлайн HUD

Онлайн HUD

Затем вам нужно создать новые скрипты в вашем проекте для управления тем, какие запросы отправляются в Matchmaker в зависимости от того, какую кнопку нажимает игрок. Ваш код для управления самими запросами должен иметь похожую структуру:
Функции
Классы
Независимо от того, как вы решите управлять вашим HUD, обязательно создайте экземпляр MatchmakerManager в вашей функции Start() чтобы убедиться, что код работает корректно.
После того как игрок создал тикет, вам нужно периодически проверять его статус, чтобы получить назначение как только 2 тикета будут сопоставлены, потому что тикет будет удалён через несколько минут после того, как это значение будет установлено. Получив назначениевы можете подключить игрока к матчу.
Сборка игрового сервера и контейнеризация
После того как вы завершите добавление изменений из предыдущего шага в проект, вам нужно собрать игровой сервер и контейнеризировать его. Сначала убедитесь, что у NetworkManager объекта gameObject следующие настройки:
Включить
Auto Start Server BuildвNetworkManagerкомпонент;Установите
portвKcpTransportкомпонент на то же значение, которое вы использовали дляGameServerPortв компоненте Director.
В этом примере мы использовали `7777` для обоих значений.

После этого перейдите к Экран сборки в Unity Editor, в меню Файл -> Параметры сборки в верхних меню. Убедитесь, что выбрали правильные пресеты в зависимости от вашей версии Unity.
До версии 2021.2:
Установите
Целевую платформукLinux;Установите
Архитектурукx86_64;Отметьте
Server Buildопции.
В противном случае:
Установите
ПлатформакВыделенный сервер;Установите
Целевую платформукLinux.
Затем нажмите собрать и выберите новую пустую папку с именем linux_server в качестве места назначения файла. Перенесите linux_server папку во вторую пустую папку, которая в этом документе будет называться [SERVER BUILD] папку, указанную в этом документе. Добавьте следующий Dockerfile и boot.sh файл в папку [SERVER BUILD] папку:
Dockerfile
Обязательно замените [GAME PORT] заполнители тем же port значением, что и ранее.
boot.sh
Обязательно замените [YOUR GAME] заполнитель именем сгенерированного файла.
Затем откройте командную строку в папке [SERVER BUILD] папке; Выполните следующие команды Docker, чтобы создать образ вашей сборки и отправить его в приватный реестр. Смотрите эту документацию если вы хотите использовать приватный реестр Edgegap.
Использование Linux
Использование cmd
Использование Powershell
Развёртывание на Edgegap
Создайте новое приложение на панели управления Edgegap со следующими настройками:
Имя приложения: Убедитесь, что это то же имя, которое вы использовали для
AppNameв компоненте Director вашего Matchmaker. Должно быть в нижнем регистре.Изображение: Может быть любая конкретная картинка, которую вы хотите использовать, чтобы легко распознавать ваше приложение среди других.
Имя версии: Убедитесь, что это та же версия, которую вы использовали для
AppVersionв компоненте Director вашего Matchmaker. Примеры: «demo», «production», «v1», «v2»Контейнер:
Реестр: «[URL]», где [URL] — значение из учётных данных, которые можно отобразить на странице репозитория контейнеров.
Репозиторий образа: «[PROJECT]/[YOUR GAME]», где [PROJECT] и [YOUR GAME] — значения, которые вы использовали ранее при отправке образа Docker.
Тег: «[TAG]», где [TAG] — значение, которое вы использовали ранее при отправке образа Docker.
Отметьте «Используется приватный репозиторий»
Имя пользователя приватного реестра: «[USERNAME]», где [USERNAME] — значение из ваших учётных данных.
Токен приватного реестра: «[TOKEN]», где [TOKEN] — значение из ваших учётных данных.
Требования: Оставьте как есть.
Порты:
Нажмите на ссылку
+ Добавить портчтобы добавить новый порт, и добавьте следующие записи:[GAME PORT]- TCP/UDP - отключите Verifications3389 - TCP - отключить проверки
Мы также рекомендуем установить Максимальная длительность игры в вашем приложении, чтобы ваши развертывания автоматически завершались через несколько минут, поскольку Matchmaker будет автоматически создавать новые при сопоставлении тикетов.
Это необходимо, чтобы убедиться, что у вас не запущены пустые развертывания слишком долго.
Тестирование с клиентскими сборками
Чтобы убедиться, что Matchmaker работает как задумано, вам нужно запустить игру на 2 отдельных клиентских экземплярах и также запустить релиз вашего Matchmaker.
Перед созданием клиентской сборки игры убедитесь, что сняли галочку с опции Auto Start Server Build у объекта NetworkManager gameObject. Затем, в зависимости от того, какой релиз Matchmaker вы тестируете, измените MATCHMAKER_URL на следующее:
Локально: измените на «http://localhost:51504"С Edgegap: измените на значение, показанное на панели Edgegap после включения релиза. В этом случае вам не нужно указывать порт.
Затем вернитесь в Экран сборки в Unity Editor, в меню Файл -> Параметры сборки в верхних меню. Выберите платформу Windows, Mac, Linux и правильную целевую платформу для вашей среды. Затем нажмите «Build» и выберите новую пустую папку под названием client_build в качестве места назначения файла.
После запуска обоих клиентов (либо два окна вашей клиентской сборки, либо одно окно сборки и редактор Unity) пусть оба выберут один и тот же режимом игры и создадут свои тикеты. Спустя короткое время оба клиента будут подключены к недавно развернутому серверу, статус которого вы можете увидеть на панели Edgegap.
Если вы тестируете с онлайн-релизом вашего Matchmaker, в настоящее время есть проблема с сертификатами, если вы включаете и отключаете релиз Matchmaker несколько раз в неделю; это приведёт к тому, что запросы к вашему Matchmaker не будут работать с Unity.
Чтобы исправить это, просто отключите ваш релиз, обновите его с другим именем, затем выпустите его снова. После этого обязательно проверьте, что URL в вашем коде правильный.
Последнее обновление
Это было полезно?

