Я начинающий разработчик под Андроид и делаю небольшую игру на Unity. И вот возник вопрос по реализации мультиплеера внутри локальной игры.
Несмотря на огромное количество материалов на эту тему, везде где я видел - остается открытым важный вопрос. Как клиентам определить ip-адрес сервера для установки соединения?
Во всех уроках на это вообще не обращают внимания, просто указывают "а вот сюда впишите ip сервера"... В лучшем случае ip должен вручную вбить игрок. Но это же крайне неудобно.
Моя игра будет работать только внутри локальной сети, максимум с парой десятков активных ip-адресов.
И я для себя придумал два способа:
1. Перебрать все адреса сети, в поисках ответа от сервера. Способ кривой, да и как перебирать только активные адреса, а не вообще все 255 по маске - я не нашел. Учитывая, что нужно еще давать какое-то время на ответ... В общем способ вообще не годится.
2. Хранить ip-адрес сервера на внешнем сайте. Сейчас я так и сделал, ip сохраняется на моем сайте, все работает как надо, но выглядит это, на мой взгляд, как дурной велосипед. Кроме того в закрытой сети система не сможет работать вообще, что крайне неудобно.
В общем, у меня ощущение, что я упускаю какой-то простой и удобный механизм...
Я далек от программирования сетевых взаимодействий, моя область это графика и UI, поэтому буду благодарен за какие-то простые, практичные советы. Путь это будет не самое красивое/быстрое/точное решение, но если я смогу его быстро прикрутить к своему приложению (в идеале скачав ассет из стора) - буду очень вам благодарен!
Сейчас приложение реализовано на Unity Network (UNet) по примеру работы чата. "Настоящий" мультиплеер мне не нужен, достаточно обмена текстовыми командами между каждым из клиентов и сервером.
Доброго дня!
Из всего вышеизложенного я так понимаю, что ваш совет - есть решение проблемы, но ввиду недостаточной базы знаний готового решения даже из этого не вижу. Могу ли я вас попросить привести ссылку на литературу или же кусок кода в качестве примера, чтобы понимать как это работает? Заранее благодарю.
Николай: Для своих целей я просто воспользовался готовым ассетом (LAN Manager) где есть необходимый функционал "из коробки". Но вот как детально он работает - не разбирался.
Еще как вариант есть LAN Party - он дешевле и проще, хотя в новой версии unity работает с ошибками. Думаю там можно подсмотреть алгоритм.
Опубликовать исходники не могу т.к. ассеты платные.
Даниил Бакалин: понял, благодарю!
Попробую посмотреть в сторону этих ассетов, хотя, конечно, странно, что такой тривиальный вопрос и не имеет простого решения.
Вы ошибаетесь, ничего вы не упускаете, нет такого механизма, поэтому и в глобальных сетях сервер должен иметь статический (постоянный) IP, иначе к нему неудобно подключаться и невозможна парковка домена.
Для глобальных сетей - безусловно, но в локальной wifi сетке, неужели нельзя быстро найти сервер?
У меня лично есть программа, - она очень быстро устанавливает соединение, со всеми устройствами в своей сети. Как то ведь она работает?
И насколько я слышал есть всякие multicast рассылки, всем в сети (могу ошибаться в названии). Может такую рассылку должен сделать сервер, а клиенты слушают входящий порт и таким образом образом узнают адрес сервера?..