Mirror (Аналог Unet)

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

Mirror (Аналог Unet)

Сообщение Saltant 12 июл 2019, 08:55

Документация на англ лежит тут: https://vis2k.github.io/Mirror/General/ - прочитал кое как с гугл транслейтом мало чё понял.
Собственно вопрос прост, кто нибудь пользуется? Или же есть те кто хорошо разбирается в unet'е? (миррор сделан по аналогии юнета) Я хочу понять принцип работы авторитарного сервера в юнити, каким образом всё это должно работать при условии что Игроки смогут коннектиться на удаленный сервер, а сервер должен соединять всех игроков (кастомный спавн прифаба для игрока из скрипта, спавн объектов на сцене для всех игроков или одного, и т.д).
В общем было бы круто найти человека который хорошо в этом разбирается, потому что третий день ничо толком не выходит кроме дефолтной сцены типа "при коннекте появляется бокс (это игрок) и им можно перемещаться чтоб другой такой же бокс (другой игрок) увидел перемещения...", получилось например сделать что когда собирается какой то предмет с уровня, сервер через [TargetRPC] плюсует +1 score в текстовое поле игрока который собрал предмет, но вот например каким образом другой игрок узнает что первый игрок собрал предмет и получил +1 score нипанятна (хотелось бы понять как отображать score "противника" а не только свои).
Короч, задумка такая - если найдется человек который продуктивно сможет обучить этому не легкому делу (написание серва с взаимодействием между игроками) то есть возможность заплатить за обучение деньгами.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Старожил
 
Сообщения: 685
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение Jarico 12 июл 2019, 09:23

Saltant писал(а):Документация на англ лежит тут: https://vis2k.github.io/Mirror/General/ - прочитал кое как с гугл транслейтом мало чё понял.
Собственно вопрос прост, кто нибудь пользуется? Или же есть те кто хорошо разбирается в unet'е?


У Mirror многовато трафика сетевого уходит, смотрел через сниффер (на входе: 15-20 кб/сек на 1 игрока, на выходе: 10-15 кб/сек - отправка на сервер)

Гляди мою тему на оф. форуме
https://forum.unity.com/threads/raknet-networking-solution.700619/
VK: _ttp://vk.com/salavan73
RakNet Client-Server Unity3D: _https://vk.cc/9xuZp8
RakNet Client-Server Github: _ttp://github.com/ep1s0de3/RakNet_Networking
RakNet Unity: _https://www.youtube.com/channel/UCPQ04Xpbbw2uGc1gsZtO3HQ
Jarico
UNIверсал
 
Сообщения: 362
Зарегистрирован: 06 янв 2019, 17:37
Откуда: 0xDEAD
Skype: none
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение VladikDEV 12 июл 2019, 11:50

а чего бы не юзать фотон?
VladikDEV
UNIт
 
Сообщения: 68
Зарегистрирован: 24 май 2016, 13:45
Откуда: Минск

Re: Mirror (Аналог Unet)

Сообщение ikhtd 12 июл 2019, 12:33

Еще для инфы, на мироре сделан усурвайвл.
https://assetstore.unity.com/packages/t ... ival-95015
Там демо вебгл есть, но по сети не работает. сервак надо самому скомпилить, а потом уже подключаться к нему такими же клиентами. Сервак компилиться и запускается на линухе или на винде и должен работать 24/7 в сутки
Исходники последней версии легко достать на пиратских сайтах типа персии. Там весь исходный код открыт. Мирор там впилен в виде dll, но тут же дается ссылка на оригинальный миррор на гитхабе. То есть легко заменить dll шарповскими скриптами.
Скрытый текст:
Объективная реальность это - что в жизни не может быть более одного пути, который в свою очередь обусловлен максимальным существующим давлением. (второй _ttp://habrahabr.ru/post/202654/)
ikhtd
Старожил
 
Сообщения: 963
Зарегистрирован: 24 мар 2014, 12:20

Re: Mirror (Аналог Unet)

Сообщение Saltant 13 июл 2019, 21:06

VladikDEV писал(а):а чего бы не юзать фотон?

Мне все равно можно и фотон если я бы нашел нормальный видео тутор как все это делается.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Старожил
 
Сообщения: 685
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение AngryCat 13 июл 2019, 21:33

Saltant писал(а):
VladikDEV писал(а):а чего бы не юзать фотон?

Мне все равно можно и фотон если я бы нашел нормальный видео тутор как все это делается.

Так туторов много. Там и документации есть. Можно еще и на англ. пошарить.
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 612
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Mirror (Аналог Unet)

Сообщение Saltant 13 июл 2019, 23:00

AngryCat писал(а):
Saltant писал(а):
VladikDEV писал(а):а чего бы не юзать фотон?

Мне все равно можно и фотон если я бы нашел нормальный видео тутор как все это делается.

Так туторов много. Там и документации есть. Можно еще и на англ. пошарить.

Ну скинь сюда норм туторы, где не только показывают как заспавнить два кубика и управлять их передвижением.
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Старожил
 
Сообщения: 685
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение AngryCat 13 июл 2019, 23:47

А что именно тебя интересует? Мб я сам могу помочь?
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 612
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Mirror (Аналог Unet)

Сообщение Saltant 14 июл 2019, 01:12

AngryCat писал(а):А что именно тебя интересует? Мб я сам могу помочь?

Ну я же написал в первом посте что интересует, распишу еще раз подробней.

Есть у меня несколько прифабов игроков, данные о выбранном игроке (прифабе) приходят c WebApi при кнопке "войти в игру" (приходит json массив со всеми параметрами персонажа) отсюда я понимаю какой прифаб мне нужно заспавнить в качестве этого игрока. - Вопрос №1 - Каким способом из кода мне нужно спавнить этот выбранный прифаб для игрока?

Есть у меня инвентарь у персонажа, в нем есть предмет, например бутылка здоровья, она выполнена в виде ScriptableObject с int переменной (сколько дает HP при потреблении), при нажатии на бутылку должен срабатывать метод повышения количества хп равной количества из бутылки и бутылка должна исчезать если она была одна а если несколько (стак бутылок) то снижаться количество на 1. - Вопрос №2 - Каким способом (в коде) мне нужно писать этот метод потребления бутылки? По логике вещей он должен срабатывать на сервере, проверять есть ли в инвентаре персонажа вообще эта бутылка и если есть запускать метод повышения хп и отправлять клиенту новое количество хп. Соответственно клиент при нажатии на бутылку должен каким то образом отсылать запрос на сервер что "я хочу сожрать вот этот предмет", а сервер должен дальше думать - разрешить ли сожрать или нет.

Есть у меня на уровне монстр, которого можно грохнуть, тут сразу два вопроса. -Вопрос №3 - Каким образом мне передавать на сервер инфу об убийстве моба чтоб сервер отдал мне лут из этого моба?, - Вопрос №4 - Каким образом через некоторое время сервер должен вновь заспавнить этого монстра?

Как видно, я абсолютно не имею понятия как работать с сетью на высоком уровне (HLAPI) и только совсем не много понимаю низкоуровневую структуру транспорта (LLAPI).
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Старожил
 
Сообщения: 685
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение AngryCat 14 июл 2019, 09:53

Все твои вопросы решаются одним способом. Называется PunRPC. Можешь нагуглить, но вот вкратце: PunRPC - это атрибут для методов, который позволяет вызывать методы и передавать аргументы всем или нужным игрокам. Как выпить зелье? Очень просто! Нужно лишь поставить к методу атрибут [PunRPC] и вызвать через исполняемый объект :D там в массиве передаешь всё необходимое.

Дополнено: Сори не все вопросы решаются через PunRPC. Чтобы заспавнить объект используй PhotonNetwork.Instantiate.

Пример "попить зелье":

Синтаксис:
Используется csharp
public int Hp = 100;

void Update(){
if(GetComponent<PhotonView>().isMine) //Это проверка, мой ли это объект, чтобы не получилось, что я нажатием кнопки не восстанавливал хп всем игрокам = )
     if(Input.GetKeyDown(KeyKode.L)){
      GetComponent<PhotonView>().RPC("DrinkVodka",PhotonTargets.All,new object[]{ 100000000 });
     }
}

[PunRPC]
public void DrinkVodka(int hpRegen){
      Hp += hpRegen
}
P.S Сорре писал от руки еще на телефоне. Могут быть ошибки :/
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 612
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Mirror (Аналог Unet)

Сообщение seaman 14 июл 2019, 11:23

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

https://www.youtube.com/playlist?list=P ... dllFpM-uw-
seaman
Адепт
 
Сообщения: 7929
Зарегистрирован: 24 янв 2011, 12:32
Откуда: Самара

Re: Mirror (Аналог Unet)

Сообщение Saltant 14 июл 2019, 19:05

Спасибо за ответы, посмотрю как просплюсь, а то я чет упоролся короче все вопросы которые задал в теме решил тупо написав на LLAPI (Telepathy), создал отдельный проект для сервера, соединил его с mysql базой игры, принимаю и отправляю байты как сообщения и тупо в swich проверяю че за шляпа от клиента припёрлась, обрабатываю и отправляю в ответ другой байт (типа сообщение респонса) и клиент его так же в свиче ловит типа "че за хрень пристала мне эта железка" и выполняет нужный метод. В принципе, в приницпе то - всё работает нормально. Единственное не много смущает что это Пуллинг, а фотон как я понял умеет подписываться на события а не крутить луп?
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Старожил
 
Сообщения: 685
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение AngryCat 14 июл 2019, 20:12

Saltant писал(а):Спасибо за ответы, посмотрю как просплюсь, а то я чет упоролся короче все вопросы которые задал в теме решил тупо написав на LLAPI (Telepathy), создал отдельный проект для сервера, соединил его с mysql базой игры, принимаю и отправляю байты как сообщения и тупо в swich проверяю че за шляпа от клиента припёрлась, обрабатываю и отправляю в ответ другой байт (типа сообщение респонса) и клиент его так же в свиче ловит типа "че за хрень пристала мне эта железка" и выполняет нужный метод. В принципе, в приницпе то - всё работает нормально. Единственное не много смущает что это Пуллинг, а фотон как я понял умеет подписываться на события а не крутить луп?
Он все умеет. Еще скажи, ты привязал mySQL бд, но ты же делаешь через WinAPI или как? Или ты просто хранишь все пароли и логины в одной переменной? :D :D
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 612
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

Re: Mirror (Аналог Unet)

Сообщение Saltant 14 июл 2019, 22:02

AngryCat писал(а):Еще скажи, ты привязал mySQL бд, но ты же делаешь через WinAPI или как? Или ты просто хранишь все пароли и логины в одной переменной? :D :D

Нет, зачем мне теперь webApi когда сервер на прямую подключен к БД и может с ней работать на прямую с помощью LinqToSql. Все так же как и в веб апи устанавливаешь коннект к БД (ip, bd, user, pass) создаешь классы таблиц, регистрируешь их и просто с сервера получаешь доступ к инфе в бд типа таким путем: "bd.Table.Find(blablabla)" ну и апдейтишь, инсёртишь, делейтишь, всё как обычно короче, только не нужны больше запросы через WebRequest к апи, чтоб апи выполнена запрос и отправила назад - а такой принцип не подходит для динамичных игр, а для каких нибудь браузерных-пошаговых - вполне. Сейчас у меня постоянный TCP коннект к серверу у клиента. Спавн персонажа реализовал пока таким образом:
"Авторизация в игре всё равно идет через веб апи (лень переписывать ибо это не динамика, кнопки тыкаются изи), при удачном логине апи возвращает Токен и список персонажей на аккаунте, когда тыкаешь на какого то персонажа чтоб им зайти - тут уже вступает в игру TCP сервер, клиент отправляет ему Токен и ID выбранного персонажа, сервер получает, сверяет данные с данными в БД и возвращает клиенту подробные характеристики персонажа для спавна и собственно выполняет Instantiate)"
Я на Google Play _https://play.google.com/store/apps/developer?id=Saltant
Аватара пользователя
Saltant
Старожил
 
Сообщения: 685
Зарегистрирован: 09 окт 2018, 16:40
Откуда: Химки
Skype: saltant1989
  • Сайт

Re: Mirror (Аналог Unet)

Сообщение AngryCat 15 июл 2019, 12:21

Ну получается, что твоя игра защищена от взлома? Ибо у меня тоже проект на MySQL бд и не знаю, как мне лучше его защитить :/
Здесь могла бы быть ваша реклама.
Аватара пользователя
AngryCat
Старожил
 
Сообщения: 612
Зарегистрирован: 20 июл 2018, 22:29
Skype: Дискорд - Флеш#4099

След.

Вернуться в Почемучка

Кто сейчас на конференции

Сейчас этот форум просматривают: Yandex [Bot] и гости: 30