Страница 1 из 1

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

СообщениеДобавлено: 06 дек 2016, 19:39
Aleksey
Мне нужно чтобы бот сцены(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"
А делать связки аля оллбуферед обычный инстантиэйт + оллбуферед обычный дестрой это костыльный метод(когда будет много ботов стек оллбуферед мигом переполнится с высокой скорострельностью пули)

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

СообщениеДобавлено: 13 дек 2016, 13:27
disignkiev
RPC в помощь (popcorn1) пуле надо выдать id

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

СообщениеДобавлено: 22 дек 2016, 18:41
Aleksey
Я уже писал не раз,что рпц для удаления и создания объектов не нужно.Это адовый Костыль.Для этого есть спец. инстантсы и дестрои фотона. Вы вообще тестили хоть раз свои комнаты вот с этими кучами рпц олбуферед функциями с активными игроками? в 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 , а не получает их.

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

СообщениеДобавлено: 23 дек 2016, 15:28
disignkiev
Как ты сделал это? у меня при попытке инстантить обьект клиентом выдаёт ошибку
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);

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

СообщениеДобавлено: 24 дек 2016, 04:58
Aleksey
Объекты сцены инстансить может только мастер клиент комнаты. Тебе это собственно и ошибка написала - "не удалось создать префаб,клиент не является мастер клиентом этой комнаты."

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

СообщениеДобавлено: 05 фев 2017, 14:12
Aleksey
Photon это поправил. Больше такого предупреждения не вылезает.

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

СообщениеДобавлено: 06 фев 2017, 17:47
юnity
Ну и, работает ваш способ, Aleksey? Я думал, тут надо пользоваться RequestOwnership() и TransferOwnership()?

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

СообщениеДобавлено: 07 фев 2017, 21:49
Aleksey
Если тебе интересно еще раз я поясню)

Проблема была просто в предупреждении которое мешалось) оно говорило что не понятно кто создает объекты сцены в объекте сцены(на котором весит скрипт с функцией 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);
 

но это все уже теперь не нужно. Предупреждение не выскакивает они там поправили в этой точке с владельцами.

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

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

и при удалении владельца не удаляяются его пули?