Network Discovery
Предположим, вы находитесь рядом с другом. Он начинает игру в режиме ведущего, и вы хотите присоединиться к нему. Как ваш телефон определит его местонахождение? Узнать его IP-адрес не совсем интуитивно и не то, что могут сделать дети.
Чтобы решить эту проблему, вы можете использовать Network Discovery. Когда ваша игра запускается, она отправляет сообщение в вашу текущую сеть с вопросом "Доступен ли какой-нибудь сервер?". Любой сервер в пределах той же сети ответит и предоставит информацию о том, как подключиться к нему.
Mirror поставляется с простой реализацией обнаружения сети, которую вы можете просто использовать в своей игре. Мы также предоставляем вам возможность расширить его скрипт, чтобы вы могли передавать дополнительные данные на этапе обнаружения.
Компоненты NetworkDiscovery и NetworkDiscoveryHUD идут в комплекте, или вы можете создать свои собственные скрипты по шаблонам скриптов.
Network Discovery использует широковещательную передачу UDP по локальной сети, позволяющую клиентам находить работающий сервер и подключаться к нему.
Когда сервер запускается, он прослушивает запросы от клиентов через порт широковещательного прослушивания UDP и возвращает URI соединения, который клиенты применяют к своему транспорту.
Вы можете настроить частоту отправки клиентами своих запросов на поиск сервера в секундах с активным интервалом обнаружения.
Событие, обнаруженное сервером, должно быть назначено методу обработчика, тоесть таким как OnDiscoveredServer метод у NetworkDiscoveryHUD.
В NetworkDiscoveryHUD, компонент NetworkDiscovery должен быть назначен автоматически.
Быстрый старт
Для использования Network Discovery следуйте этим шагам:
Создайте gameobject с NetworkManager если вы еще этого не сделали
Не добавляйте NetworkManagerHUD. Discovery имеет другой компонент пользовательского интерфейса.
Добавьте компонент NetworkDiscoveryHUD к объекту NetworkManager. Компонент NetworkDiscovery будет автоматически добавлен и назначен в ваш HUD.
Добавьте игрока в поле NetworkManager'а если вы ещё не сделали этого.
Создайте и запустите билд
Кликните на Start Host
Запустите play mode в редакторе и нажмите на Find Servers
Редактор должен найти другой билд и отобразить кнопку
Кликните на новую кнопку чтобы подключиться к хосту.
NetworkDiscoveryHUD предоставляется как простой и быстрый способ начать работу, но вы, вероятно, захотите заменить его своим собственным пользовательским интерфейсом.
Custom Network Discovery
Вы можете полностью заменить пользовательский интерфейс, добавив свой собственный интерфейс вместо стандартного NetworkDiscoveryHUD. Вам все еще нужен компонент NetworkDiscovery чтобы проделать дальнейшую работу.
Иногда требуется предоставить дополнительную информацию в сообщениях об обнаружении. Некоторые варианты использования могут включать:
Клиент может показать, находится ли сервер в PvP или PvE режиме
Клиент может показать, насколько загружены серверы.
Клиент может показать пинг для каждого сервера, чтобы игрок мог выбрать самый быстрый сервер
Клиент может показать язык, который используется на сервере
Клиент может показать, защищен ли сервер паролем
Для этого мы предоставили шаблон, который находится в Asset menu, кликните Create > Mirror > Network Discovery.
Это создаст скрипт в вашем проекте с двумя пустыми классами сообщений и пользовательским классом NetworkDiscovery, который наследуется от NetworkDiscoveryBase и содержит все методы переопределения, включенные и задокументированные для вас.
Классы сообщений определяют, что передается между клиентом и сервером. До тех пор, пока вы сохраняете простоту своих сообщений, используя типы данных которые Mirror может сериализовать, вам не нужно будет писать для них пользовательские сериализаторы.
Кастомный класс NetworkDiscovery содержит переопределения для обработки приведенных выше сообщений.
Возможно, вы захотите обратиться к скрипту NetworkDiscovery.cs в папке Components/Discovery, чтобы увидеть, как они должны быть реализованы.
Примечание: Примите во внимание любую блокировку антивирусом / брандмауэром, а также дополнительные настройки для вашей конкретной платформы (широковещательный адрес iOS, настройки общего доступа к обнаружению сети в Windows и т.д.).
Last updated