Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сеть в Unity3D

Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение Aleksey 06 дек 2016, 19:39

Мне нужно чтобы бот сцены(PhotonNetwork.InstantiateSceneObject) стрелял пулями(PhotonNetwork.InstantiateSceneObject)Как создавать объекты объектам сцены? если им создавать объекты сцены внутри объекта сцены то будет консоль долбить "Adjusting owner to sender of updates. From: 0 to: 1" а если создавать PhotonNetwork.Instantiate мастерклиенту внутри объектов сцены то тогда когда он выйдет пули у ботов исчезнут некоторые т.е. опять же надо PhotonNetwork.InstantiateSceneObject а не PhotonNetwork.Instantiate а там "Adjusting owner to sender of updates. From: 0 to: 1"
А делать связки аля оллбуферед обычный инстантиэйт + оллбуферед обычный дестрой это костыльный метод(когда будет много ботов стек оллбуферед мигом переполнится с высокой скорострельностью пули)
Продукты на тему онлайна в Ассет Сторе
_https://www.assetstore.unity3d.com/en/# ... sher:21589
Аватара пользователя
Aleksey
UNIт
 
Сообщения: 56
Зарегистрирован: 17 фев 2015, 16:09

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение disignkiev 13 дек 2016, 13:27

RPC в помощь (popcorn1) пуле надо выдать id
disignkiev
UNец
 
Сообщения: 9
Зарегистрирован: 07 ноя 2016, 10:27

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение Aleksey 22 дек 2016, 18:41

Я уже писал не раз,что рпц для удаления и создания объектов не нужно.Это адовый Костыль.Для этого есть спец. инстантсы и дестрои фотона. Вы вообще тестили хоть раз свои комнаты вот с этими кучами рпц олбуферед функциями с активными игроками? в 5-10 онлайн в комнате?где активно выходят заходят? да там ад будет. После первых 100 накопленных вызовов стека олбуферед уже начинаются проблемы и ув. секунды загрузки комнаты и вылезают - “QueueIncomingReliableWarning.This client buffers many incoming messages. This is OK temporarily.With lots of these warnings, check if you send too much or execute messages too slow.”

Я нашел нормальный способ как в объекте сцены создавать объекты сцены.

Debug log – “Adjusting owner to sender of updates. From: 0 to: 1”

Это предупреждение возникает в точке получения данных объектов сцены другим игрокам через OnPhotonSerializeView.
При возникновении этого предупреждения игрок меняет у объектов сцены владельца со сцены на мастер клиента.(т.к. он не понимает от кого получает данные из OnPhotonSerializeView который на объекте сцены)
Нужно прописать в эвейке(нельзя в старте)
Синтаксис:
Используется csharp
if(!photonView.isMine) photonView.ownerId = PhotonNetwork.masterClient.ID;

Когда мастер клиент выходит,то нам снова надо менять владельца, чтобы не возникло это предупреждение.Надо прописать еще такие строки:
Синтаксис:
Используется csharp
void OnMasterClientSwitched()
{photonView.ownerId = PhotonNetwork.masterClient.ID;}

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

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение disignkiev 23 дек 2016, 15:28

Как ты сделал это? у меня при попытке инстантить обьект клиентом выдаёт ошибку
Failed to InstantiateSceneObject prefab: perf1. Client is not the MasterClient in this room.
UnityEngine.Debug:LogError(Object)

Синтаксис:
Используется csharp
  PhotonNetwork.InstantiateSceneObject(newo.name, newo.transform.position, Quaternion.identity, 0,null);
disignkiev
UNец
 
Сообщения: 9
Зарегистрирован: 07 ноя 2016, 10:27

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение Aleksey 24 дек 2016, 04:58

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

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение Aleksey 05 фев 2017, 14:12

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

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение юnity 06 фев 2017, 17:47

Ну и, работает ваш способ, Aleksey? Я думал, тут надо пользоваться RequestOwnership() и TransferOwnership()?
Give exact coordinates of the decision of the problems
Аватара пользователя
юnity
UNITрон
 
Сообщения: 290
Зарегистрирован: 21 июл 2015, 18:30

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение Aleksey 07 фев 2017, 21:49

Если тебе интересно еще раз я поясню)

Проблема была просто в предупреждении которое мешалось) оно говорило что не понятно кто создает объекты сцены в объекте сцены(на котором весит скрипт с функцией OnPhotonSerializeView и весит в observerd фотонвиева). То что ты предложил близко, но не точно, твой вариант подразумевает на мой взгляд что мы меняем с одного владельца на другого но в моем примере фотон просто не понимал кто(владелец) просит создавать объекты сцены

Мне посчастливилось работать месяц с одним чуваком из фотона и он меня поднатаскал немног))) и решение конкретно этой проблемы он привел следующие -
создание пули в скрипте поведения игрока -
Синтаксис:
Используется csharp
GameObject _bullet = PhotonNetwork.InstantiateSceneObject("Bullet",new Vector3(... и т.п.);
Bullet  _bullet = _bullet.GetComponent<Bullet> ();
_bullet.PlayerID = PhotonNetwork.player.ID;

в скрипте Bullet он добавил следующие строки -
Синтаксис:
Используется csharp
       
public int PlayerID;
PhotonPlayer _Player;
if (_Player == null)
     _Player = PhotonPlayer.Find(PlayerID);
 

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

Re: Как создавать объекты PhotonNetwork.InstantiateSceneObject

Сообщение юnity 08 фев 2017, 10:45

Спосибо, значит, осталось только в скрипте с пулей добавить
Синтаксис:
Используется csharp
void OnMasterClientSwitched()
{photonView.ownerId = PhotonNetwork.masterClient.ID;}

и при удалении владельца не удаляяются его пули?
Give exact coordinates of the decision of the problems
Аватара пользователя
юnity
UNITрон
 
Сообщения: 290
Зарегистрирован: 21 июл 2015, 18:30


Вернуться в Сеть

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

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