Mirror
Mirror на Edgegap
Это руководство поможет вам создать безголовый сервер на Edgegap для Unity-проекта, использующего Mirror в качестве сетевого решения.
В этом руководстве будет использован открытый пример проекта Tanks, который уже доступен в вашем примере Mirror, по пути Assets/Mirror/Examples/Tanks.
Окончательный пример можно найти в нашем GitHub.
Собрать игровой сервер
Когда игра будет готова, перейдите на Экран сборки в Unity Editor, в меню Файл -> Параметры сборки в верхних меню. Убедитесь, что выбрали правильные пресеты в зависимости от вашей версии Unity.
До версии 2021.2:
Установите
Целевую платформукLinux;Установите
Архитектурукx86_64;Отметьте
Серверная сборкаопции.
В противном случае:
Установите
ПлатформакВыделенный сервер;Установите
Целевую платформукLinux.
Затем нажмите собрать и выберите новую пустую папку с именем linux_server в качестве места назначения файлов. Перенесите linux_server папку во вторую пустую папку, которая в этом документе будет называться [SERVER BUILD] папкой.
Контейнеризация выделенного игрового сервера
В этой части мы создадим образ Docker, содержащий выделенный игровой сервер. Вам также может быть полезно прочитать Unity Server в Docker.
Если вам нужна дополнительная информация о Docker с Edgegap, обратитесь к этой документации.
Dockerfile
Обратите внимание на порт, который вы используете для сетевых коммуникаций, называемый [GAME PORT]. По умолчанию используется порт 7777. Эту информацию можно найти в Unity Editor, на NetworkManager игровом объекте, в свойство компоненте.
Скопируйте приведённые выше строки и вставьте их в ваш Dockerfile, помещённый внутри
[SERVER BUILD]. Измените[GAME PORT]заполнители на ваш игровой порт.
Наличие [GAME PORT] открытого как для TCP, так и для UDP позволяет вам использовать любой транспорт, который вы предпочитаете, в NetworkManager компоненте Mirror. Наконец, создайте файл с именем boot.sh в корне папки [SERVER BUILD] . Он будет выполняться при запуске образа в контейнере.
Скопируйте следующие две строки, убедитесь, что заменили
[YOUR GAME]заполнители на имя сгенерированного файла.
На этом этапе у вас должна быть следующая структура:
Папка [SERVER BUILD]> > -Dockerfile> > -boot.sh> > -linux_serverпапка > > > - Сгенерированные Unity файлы
Откройте командную строку в папке
[SERVER BUILD]и выполните следующие команды Docker:
Для пользователей с ARM CPU (Mac M1, M2 и др.) см. специальную страницу.
Использование Linux
Использование cmd
Использование Powershell
После выполнения этих команд вы должны увидеть загруженный образ на сайте Edgegap, если вы используете Edgegap Container Registry. См. эту документацию если вы хотите использовать реестр Edgegap. Вы также можете использовать другой приватный реестр.
Развёртывание на Edgegap
Перейдите на страницу Приложения и игры веб-сайта. Нажмите на кнопку Создать новое в правом верхнем углу, чтобы получить доступ к форме создания приложения. Ниже поля и как их правильно заполнить:
Название приложения: Может быть любым заметным именем, которое вы хотите использовать, чтобы легко распознать приложение среди других.
Изображение: Может быть любым конкретным изображением, которое вы хотите использовать, чтобы легко распознать приложение среди других.
Имя версии: Вы можете указать имя версии, чтобы описать назначение версии, которую вы разворачиваете. Примеры: «demo», «production», «v1», «v2»
Контейнер:
Реестр: «[URL]», где [URL] — значение из учётных данных, которые можно отобразить на странице репозитория контейнеров.
Репозиторий образа: «[PROJECT]/[YOUR GAME]», где [PROJECT] и [YOUR GAME] — значения, которые вы использовали ранее при отправке образа Docker.
Тег: «[TAG]», где [TAG] — значение, которое вы использовали ранее при отправке образа Docker.
Отметьте «Используется приватный репозиторий»
Имя пользователя приватного реестра: «[USERNAME]», где [USERNAME] — значение из ваших учётных данных.
Токен приватного реестра: «[TOKEN]», где [TOKEN] — значение из ваших учётных данных.
Требования: Оставьте как есть.
Порты:
Нажмите на ссылку
+ Добавить портчтобы добавить новый порт, и добавьте следующие записи:[GAME PORT]-TCP/UDP- отключить проверки3389 - TCP - отключить проверки
После создания приложения вы можете нажать кнопку Deploy чтобы продолжить развёртывание вашего игрового сервера. Выберите регион для развёртывания и укажите количество случайных игроков, которое вы хотите сгенерировать в зависимости от вашей игры. Проверьте, что всё работает корректно, проверив следующее:
Последний статус должен быть установлен в
Готов.В
Сопоставление портоввкладке, вы должны видеть порт, который вы указали в форме создания приложения:

Добавьте пример HUD в ваше клиентское приложение
Установите
ПортзначениесвойствоRelay GUINetworkManagerк внешнему порту, определённому вСопоставление портоввкладке вашего развёртывания.
В этом примере порт был установлен в 31887. Это в первую очередь зависит от вашей игры и, скорее всего, будет задаваться программно в кодовой базе игры.
Установите значение
Сетевой адресвСетевом менеджерена адресХост. Этот URL можно найти вСводке развёртыванияна панели управления или через API.
В этом примере адрес был установлен в 0ace560706a5.pr.edgegap.net. Опять же, это значение, скорее всего, будет установлено программно во время того, как клиент будет общаться с мастер-сервером/API, отвечающим за процесс матчмейкинга.
С правильной информацией вы сможете нормально подключиться к игровому серверу и сразу начать играть.
Теперь у вас есть проект на Mirror, доступный для развёртывания по требованию!
С развёртываниями на основе мест возможно использовать Mirror для создания системы, которая автоматически удаляет зависшие сессии Edgegap, когда игрок отключается от сервера, используя NetworkManager функции обратного вызова, и скрипт NetworkBehaviour , прикреплённый к префабу игрока, который использует функцию удалённого вызова (RPC) и функцию команды (Command).
Когда сервер запускается, NetworkManager извлекает список ID сессий связанных с его развёртыванием через Edgegap API и сохраняет его. Затем, когда новый игрок подключается к серверу, на стороне клиента инициируется функция через RPC , которая отправит IP-адрес игрока назад на сервер с помощью команды. Зная IP игрока, сервер проверяет совпадающий IP в данных каждой сессии; сервер получает данные сессии, используя её сохранённый ID через Edgegap API. Если совпадение найдено, ID сессии отображается на NetworkConnectionToClient.
Поскольку новые сессии могут добавляться после запуска сервера, список ID сессий обновляется и новые сессии проверяются, если сопоставление не удалось найти с первого раза.
Наконец, когда игрок отключается от сервера, сервер использует IP этого игрока, NetworkConnectionToClient чтобы получить связанную с ним ID сессиисессию, затем использует Edgegap API для удаления этой сессии. Это освобождает сокет в развёртывании для нового игрока.
PlayerNetworkBehaviour
CustomNetworkManager
Дополнительные функции
Этот скрипт можно расширить дополнительными, независимыми функциями, которые помогают управлять сессиями в отдельных случаях.
Например, можно задать тайм-аут для удаления сессий с пустыми местами после настраиваемого промежутка времени после полной инициализации сервера. Это полезная функция в случае, когда игрок выходит до того, как его билет матчмейкера будет обработан, что создаёт пустую сессию после нахождения матча. Если игрок никогда не отправит свой IP для сопоставления с ID сессии до истечения тайм-аута, то такая сессия удаляется, освобождая сокет.
Ещё одной функцией может быть отключение неактивных игроков после длительного периода времени, чтобы освободить сокеты. После подключения к серверу клиент должен отправлять минималистичное сообщение сердцебиения на сервер каждые несколько секунд, иначе он будет отключён, если подряд будет пропущено слишком много сообщений сердцебиения. Интервал между сердцебиениями и максимальное число подряд пропущенных сообщений можно настроить в зависимости от потребностей игры. В этом примере сигнал сердцебиения отправляется каждые несколько секунд, если танк перемещается по карте или стреляет.
PlayerNetworkBehaviour - управление сессиями мест
CustomNetworkManager - управление сессиями мест
Последнее обновление
Это было полезно?

