Как у всех игроков включить нужные спаун точки?

Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 05 мар 2017, 08:30

Как по сети включить нужные спаун точки до того, как заспауниться игрок??
Синтаксис:
Используется csharp
void OnJoinedRoom(){
if(PhotonNetwork.connected == true && PhotonNetwork.isMasterClient){
photonView.RPC("SetSpownPoints", PhotonTargets.AllBufferedViaServer,"pointsGrup1");
}

SpownPlayer();
}

void SetSpownPoints(string pointsName){
if(pointsName == "pointsGrup1"){
Grup1.SetActive(true);
}
}
 


Это не работает, не успевают включиться спаун точки до того как заспауниться игрок.

Как сделать так чтоб игрок заспаунился после того как включаться спаунточки?
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 05 мар 2017, 10:27

Неужели опять только через апдейт ждать подгрузку спаунт точек опять, а потом только спаунить игрока??
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение юnity 05 мар 2017, 15:03

Мне кажется надо не PhotonTargets.AllBufferedViaServer отправлять сообщение, а сначала отправить мастеру игрока который должен спавниться и от туда послать всем
Синтаксис:
Используется csharp
photonView.RPC("SetSpownPoints", PhotonTargets.AllBufferedViaServer,"pointsGrup1");
и тогда поместить в pointsGrup1 игрока. Если что.
Give exact coordinates of the decision of the problems
Аватара пользователя
юnity
UNITрон
 
Сообщения: 290
Зарегистрирован: 21 июл 2015, 18:30

Re: Как у всех игроков включить нужные спаун точки?

Сообщение Aleksey 06 мар 2017, 13:41

Опиши нормально что надо тебе сделать? Вот у тебя есть начальная точка. Создается комната . Создатель комнаты т.е. мастер клиент заходит в нее. Потом в комнату заходят другие игроки. И он должен "сказать" другим игрокам где им спавнится. Я правильно понял? Или игроки одновременно (партия игроков) заходят в комнату?
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 07 мар 2017, 08:12

Aleksey писал(а):Опиши нормально что надо тебе сделать? Вот у тебя есть начальная точка. Создается комната . Создатель комнаты т.е. мастер клиент заходит в нее. Потом в комнату заходят другие игроки. И он должен "сказать" другим игрокам где им спавнится. Я правильно понял? Или игроки одновременно (партия игроков) заходят в комнату?

Да правильно.
И одновременно же в фотоне не могут зайти партия игроков, всегда кто-то первый, а остальные потом.
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 07 мар 2017, 09:07

Сделал спаун игроков в прамо в rpc где спунятс спаун точки, чуть задержка но по другому походу никак.
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение Aleksey 07 мар 2017, 22:03

Ну например ты можешь в свойстве комнаты прописать респауны мастер клиентом.
потом когда игроки будут заходить они будут получать эту строчку из свойстве комнаты(строчка из векторов).

P.S. : Учись как обрабатывать конвертировать заменять удалять символы в строке. Эта практика очень тебе пригодится когда работаешь с сетью.Ты чаще всего передаешь данные в виде Пакетов которые состоят из кучи заголовков (которые естественно весят много байт) . Если ты передаешь в секунду очень много толстых пакетов, то сеть будет вся тормозить. И бывает,важно передавать вместо кучи пакетов - один. Экономишь трафик. Это например часто нужно когда у тебя есть боты в играх. Короче. Умей обрабатывать качественно строки=)) Иначе такие простые вопросы по передачи массива респауна векторов не задавал бы)). Все равно нельзя нам передавать другим игрокам массивы,листы и элементы иногда приходится запихивать в строчку. Допустим если мы будем передавать работу с массивами листами через Рпц функции, все хорошо да, НО как новому игроку все эти данные то получить? передать ему пачку рпц аллбуферед? ну это все приведет к фиговым последствием. Когда игрок заходит в комнату в которой огромный накопленный стек вызовов рпц, он просто будет долго грузить комнату. Да и если я правильно понимаю то в момент захода в комнату когда он получает весь этот огромный стек вызовов все другие игроки лагают потому что зашедшему в комнате передается в секунду сразу дофига огромного трафика(стек вызовов). Вообще хранить сетевую не удаляемую накопительную кучу трафика это не комильфо и головные боли))

Добавлю : я конечно преувеличил. На тему того что листы вообще нельзя использовать. Можно например когда за ними легко следить, если элементы добавляются в он фотон инстантиэйте, а удаляются в какой нибудь рпц олл функции или в кулбеке он плеер дисконектед удаляется элемент листа игроков. Но когда вся работа с листами не связана никак с вот этими кулбеками - https://doc-api.exitgames.com/en/pun/cu ... backs.html
тогда это уже почти нереально отследить ,такая структура данных легко полетит во время частого конекта,дисконекта игроков. Или приведет к не удаляемому мусору в комнате если это еще связанно и с инстансом не от фотона. И все равно рано или поздно придется от рпц олл перейти на рпц олл буферед и тоже самое с ивентами фотона которые работают с листами.
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 08 мар 2017, 22:23

Aleksey писал(а):P.S. : Учись как обрабатывать конвертировать заменять удалять символы в строке.

Это как? Назыание команд чтоль и количество текста сокращать?? То есть раньше у меня [RPC]void SenData() надо сократить до void SD() ?? И так же со всеми стрингами в Рпц чтоль?
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение Aleksey 09 мар 2017, 01:26

да,например сокращать. например если мы передаем куча векторов позиций ботов другим их надо передавать не через много он фотон сериализейшен а через один. который отправляет другим игрокам строчку из = вектор1+вектор2+ ... и т.д. и там чтобы посылать меньше трафика и меньше нагружать сеть чтобы не тормозило их движение как можно в большем количестве(рывки) надо убирать из строчки например запятые и скобки чтобы передаваемая строчка весила меньше тогда сообщение и передается быстрее.

А почему лучше передавать не 20 пакетов позиций ботов а один толстый пакет из длинной строчки это я писал выше - пакет состоит из кучи заголовков которые весят дофига байт + отдельно тоже весит это то что отправляет грубо говоря твой пакет на сервер а потом к игроку нужному. Это тоже все тратит байты))))

Чтобы тебе легче было понять щас вкратце обрисую смотри - по описанию скрипта он фотон сериализейшен мы знаем что он обновляется каждую секунду 10 раз. это значит что каждое обновление(сетевое сообщение =пакет) игрок получает примерно раз в 100 мс. Если я правильно понял это время которое тратится на то чтобы пакет отправить на сервер и потом передать нужному адресату. когда ты передаешь по сети слишком много пакетов то будет переполнение и будет очередь которая ув. 100 мс на 110 мс и т.д. и конечно будут рывки в движении у ботов если отправлять 20 пакетов. даже если в них будето только передача вектора три позишин. Это все равно дофига байт.
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 09 мар 2017, 07:12

У меня такая сетевая часть,не подскажешь как можно ее оптимизировать?
У меня какраз сильно напрягается проц при игре с многими ботами, у того кто присоеденяется к игре, то есть не у мастерКлиента, что странно, должно быть наоборот же, мастер клиент, который спаунит ботов и управляет ими, он болжен больше напригаться чем присоеденившийся игрок.
Синтаксис:
Используется csharp
void Update () {
               
        if (photonView.isMine) {

        }else {
                transform.position = Vector3.Lerp (transform.position, realPosition, CharLerping);
                transform.rotation = Quaternion.Lerp (transform.rotation, realRotation, CharLerping);
                }
        }

public void OnPhotonSerializeView(PhotonStream stream, PhotonMessageInfo info) {
        if (stream.isWriting) {
       
                stream.SendNext(transform.position);
                stream.SendNext(transform.rotation);
        }else {

                realPosition = (Vector3)stream.ReceiveNext();
                realRotation = (Quaternion)stream.ReceiveNext();
                if(gotFirstUpdate == false) {
                        transform.position = realPosition;
                        transform.rotation = realRotation;
                        gotFirstUpdate = true;
                }                      
        }
                       
}


И не совсем понял с запятыми и скобками как их можно сокращать ?
Не подскажешь наглядно, на примере скрипта какого-нибудь?
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение Aleksey 09 мар 2017, 15:30

я зачем тебе вообще пишу эти толстые сообщения пытаюсь по грамотней что то сформулировать, для чего? чтобы ты потом тупо скатал какой то скрипт ? ты не понимаешь как из строчки string убрать скобки или запятые? Ну будь пожалуйста ответственней хоть чуточку больше , ты сейчас не в учебном заведении где надо скорей скатать или чо то написать и изучить с гугла за пару дней, чтоб препод поставил зачот и отстал)))

Пойми, Ты пытаешься разработать Сетевую игру,хоть и пускай в готовой легкой для понимания абстрактной сетевой оболочке фотонклауд(но это все равно сеть со своими кучами проблем и тонкостями такими как например предел сообщений без задержки и временной парадокс) которые невозможно понять или осилить за пару дней и не поможет - "аля скатал решение и все заработало". Перечитывать доки по фотону надо миллион раз и практиковаться практиковаться и еще раз практиковаться.

Если ты не захочешь пытаться себя воспитывать и учиться читать и переваривать офф. документацию на английском языке по фотон клауду и юнити почти каждый день например, ТЫ никогда не научишься нормально кодить на фотонклауде в юнити. Я уже молчу о том что по поводу обработок строк есть кучу русского материала. Сайт метанит,профессор веб , MSDN и т.д.
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 09 мар 2017, 19:27

Aleksey писал(а): ты не понимаешь как из строчки string убрать скобки или запятые?

Ну я и так никогда не использовал в стрингах ни запятые ни скобки, ты меня слегка запутал, поэтому и спросил наглядный пример можт чего и не знаю.
По поводу сокращения назвний rpc и посылаемых значениях, тоже рб этом догадывался, попробую протестирую, посмотрим насколько это эффективно или нет.

В остальном, пример скрипта гораздо больше бы дал для понимания и обучения, чем "толстые" сообщения, ты не знал что лучше один раз показать, чем сто раз рассказать, такой принцип везде вроде как лучше работает, тебе же в университете, когда учишься тоже показывают, а не рассказывают например).

Если тебе в не хота поделиться наработками как более эффективней подправить мой скрипт, ну не делись, что могу сказать.
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение Aleksey 09 мар 2017, 20:54

У меня какраз сильно напрягается проц при игре с многими ботами, у того кто присоеденяется к игре, то есть не у мастерКлиента, что странно, должно быть наоборот же, мастер клиент, который спаунит ботов и управляет ими, он болжен больше напригаться чем присоеденившийся игрок.

он управляет ими да.Он просто управляет через возможности юнити(риджит боди трансформ позишин и т.д.) .Причем тут нагрузка сети касаемо того, кто ими управляет? =) Сетевая нагрузка происходит на другого, того кто присоединился, потому что он получает дофига пакетов позиций перемещения ботов от мастер клиента(при получении кучи пакетов он получает задержку в виде переполнения,Образуется очередь получения).По поводу нагрузки проца это как я понял ты про падение фпс. Я думаю, что падения фпс у тебя просто из-за того, что открыто две сборки(одна в юнити другая в пс сборке и проц тупо не справляется и сборка которая не выделана в данный момент проседает в фпс)
В остальном, пример скрипта гораздо больше бы дал для понимания и обучения, чем "толстые" сообщения, ты не знал что лучше один раз показать, чем сто раз рассказать, такой принцип везде вроде как лучше работает, тебе же в университете, когда учишься тоже показывают, а не рассказывают например).

Так вот я и хочу чтобы ты сам додумал как сделать )) иначе все бессмысленно то что я объяснял до этого) если скатаешь))
Смотри. вот начал говорить о 20 ботах да. Т.е. у тебя 20 он фотон сериализейшен виевов да ? в каждом из котором мы посылаем позицию(вектор3) . Возьмем пока только перемещение, вращение опустим из он фотон сериализейшена, чтобы легче понимать тебе то что я сейчас объясняю. Как я тебе уже писал выше о том, что пакет передачи в виде вектора3 это не просто 16 байт - https://doc.photonengine.com/en-us/pun/ ... -in-photon
там еще у пакета есть заголовки и трата байт на отправку пакета - https://doc.photonengine.com/en-us/pun/ ... y-protocol
Следовательно отсюда вывод, чтобы игрок который присоединился к мастер клиенту получал быстро позиции большого кол-ва ботов он должен получать не куча пакетов вектора3, а один пакет из стринг строки в которой все векторы сразу. Понял?)
Ну я и так никогда не использовал в стрингах ни запятые ни скобки, ты меня слегка запутал,

Хорошо что заговорили о скобках я походу лишнюю обработку строкового пакета делал до его отправки.... :D . В любое случае ты будешь работать со строками,тебе надо чтобы передавать более мелкую строку,обрезать дробную часть каждого флоата вектора3 до одного) + тот кто получает ему надо разделять строку на кучу строк-флоатов
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как у всех игроков включить нужные спаун точки?

Сообщение jimmm 09 мар 2017, 21:28

Понять то понял, что нужно вектор3 в стринг переводить, но как это правильно записать всеравно не пойму.

Да фпс просидает именно на присоеденившемся устройстве, я тестил на разных устройствах, и профайлер показывает что загружается имеено апдейт сетевого скрипта,
Перегрузки пакетов вроде как не должно быть, так как у меня photonview просто unreliable стоит, он же не должен выстраивать очередь пакетов.

Причем самое интересное, что раньше этого небыло, раньше наоборот просидал мастерклиент, где-то я ошибоку сделал наверное,
jimmm
UNIверсал
 
Сообщения: 417
Зарегистрирован: 23 янв 2013, 22:57

Re: Как у всех игроков включить нужные спаун точки?

Сообщение Aleksey 10 мар 2017, 02:41

Понять то понял

Окей если ты понял,тогда напиши мне сейчас примерный набросок сколько ты тратишь байт трафика на 20 ботов. И как ты это посчитал(формулу напиши). Игрока не берем в формулу. + не берем вращение из он фотон сериализейшен только позишин Вектор3
Сколько в секунду ты тратишь байт трафика через 20 он фотон сериализейшен где в каждом передача вектор3?
При скольких примерно байт трафика у тебя будут 100% тормозить передача позиций по сети у ботов ?
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

След.

Вернуться в Photon

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

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1