Страница 1 из 2
Как оставить объекты которые инстантились photon cloud?
Добавлено:
29 ноя 2016, 06:21
jimmm
Здравствуйте.
Как оставить объекты которые инстантились хозяеном сессии в photon cloud?
То есть игрок создал комноту, и вместе с ним создались все объекты в миссии, как оставить объекты если мастер уходит?
Используется csharp
if(PhotonNetwork.isMasterClient){
SpownBot();
}
Как оставить ботов, если мастерклиент выйдет из комнаты?
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
29 ноя 2016, 07:59
Aleksey
мастер клиент может создавать фотон инстантиэйты сцены. Они не удаляются после его выхода
и если из комнаты выходит оставшийся единственный игрок то ты ничего не сможешь сохранить в комнате,она удалится и все ее свойства комнаты тоже.
так же у такого объекта есть свои особенности например у него owner = null
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
29 ноя 2016, 16:51
jimmm
Ну как так, вы говорите что не удаляются.
Когда один игрок создает комнату, то все управление ботами которые спавнятся идут от усптройства мастер игрока? И если мастер игрок уходит, как боты будут оставать, кто будет перехватывать управление ими?
В момент выхода это надо переинстанчвать всех ботов уже на другом устройстве мастер клиента.
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
29 ноя 2016, 17:21
Aleksey
есть 1 и 2 игрок
После того как 1 игрок - мастер клиент выходит мастер клиенство передается следующему т.е. 2 игроку(если быть точнее передается тому у кого наименьший виевайди )
т.е. если до выхода первого игрока в photonView.isMine скрипты поведения ботов заходил 1 игрок мастер клиент и управлял ими, то теперь будет в этот photonView.isMine заходить второй.(допустим мы говорим сейчас про апдейты или фикситапдейты)
Насчет эвейков стартов сетевых префабов объектов сцены надо делать не так как с префабами игроков т.к. в данном примере который я тебе описал второй игрок когда получит заход через photonView.isMine он будет ссылаться на нулл переменные потому что до этого в старт или эвейк заходил только мастер клиент первый игрок и инициализировал переменные только он(если был в старте эвейке photonView.isMine )
Я например убираю photonView.isMine банально в стартах и эвейках скриптов объектов сцены.Тогда такой проблемы не возникает.
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 00:27
jimmm
Не совсем понял логики, как это в ключевых строках то кода?
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 05:18
Aleksey
ну если ты не понял то что я написал перечитай. Ролики ютуба по фотон клауду смотрел от Александра Сосновского? примеры фотон клауда на асетсторе?
Мне кажется что ты не понимаешь основ и у тебя каша в голове.
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 10:48
юnity
А по теме вопрос можно? А если всем клиентам компоненты PhotonView объектов сцены собрать в массив, обращаться к ним можно будет после смены мастерклайнта?
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 12:04
ikhtd
я не скажу как это сделать- но чисто по алгоритму это можно бы сделать так...на событии выхода из игры этот игрок должен передать все свои фотон инстансы новому владельцу- скажем любому произвольному игроку . это типа как ваш вопрос про подбор стрел - когда объектом могут владеть разные игроки. так вот этот вопрос решается таким методом - просто пример из старой юнити сети- но они с фотоном 100 проц аналогичны
https://docs.unity3d.com/ScriptReferenc ... iewID.htmlнужно сменить viewid у объекта
ловить событие выхода? на веб играх это почти невозможно. единственое есть 100 проц тупые методы например если в игре залочен курсор- то ловить на любом нажатии клавиши esc - то есть любой разлок курсора.
кстати я сколько игр не делал - у меня тоже было много объектов принадлежащих только какому то игроку - так у меня все эти объекты всегда исчезают при выходе этого игрока. это одновременно и увеличивает производительность - если проблемы с большим количеством игроков в сцене
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 12:52
юnity
То есть объекты исчезнут а останутся их позиции, так что ли? А зачем мне тогда их вьюайди? Если мне надо что бы PhotonView объектов появляющихся с новым мастером, было столько же сколько и старых, и их вьюайди было такимже , и позиция(объект полностью со своими фичами(стрелами, пулями, ранами...)).
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 13:12
ikhtd
в приведенном примере на инстанс не надо смотреть - только на смену id. вам инстанс не надо делать - просто точного примера нет. а переменные и метод теже будут. метод по передаче нового id от нового владельца объекта. это же логично то что было у меня с моей смертью передать новому игроку -иначе все потеряется
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 13:31
юnity
Вытаскивать сцену заменяя айди сцены наового мастерклайна, на старые айди в момент когда тот покидает игру, правильно я понял?
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 13:35
ikhtd
менять id только на тех объектах которые принадлежали игроку, который уходит. значит он должен где то хранить список этих объектов и он же должен инициировать их смену id, кроме него это никто не сделает.
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 14:03
юnity
Спасибо за исчерпывающий ответ, вот нашёл код для Photon Cloud ничем не отличается
Используется csharp
void SpawnMyPlayerEverywhere()
{
//Manually allocate PhotonViewID
PhotonViewID id1 = PhotonNetwork.AllocateViewID();
photonView.RPC("SpawnOnNetwork", PhotonTargets.AllBuffered, transform.position,
transform.rotation, id1, PhotonNetwork.player);
}
public Transform playerPrefab; //set this in the inspector
[PunRPC]
void SpawnOnNetwork(Vector3 pos, Quaternion rot, PhotonViewID id1, PhotonPlayer np)
{
Transform newPlayer = Instantiate(playerPrefab, pos, rot) as Transform;
//Set the PhotonView
PhotonView[] nViews = go.GetComponentsInChildren<PhotonView>();
nViews[0].viewID = id1;
}
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 14:43
jimmm
ikhtd писал(а):менять id только на тех объектах которые принадлежали игроку, который уходит. значит он должен где то хранить список этих объектов и он же должен инициировать их смену id, кроме него это никто не сделает.
а как это можно сделать примерно, не подскажете?
то есть если я уже знаю объект, как отправить команду у нового мастера? AllBufferedViaServer, я так понимаю?
как на другом устройстве инициировать скрипт смены id?
Re: Как оставить объекты которые инстантились photon cloud?
Добавлено:
30 ноя 2016, 14:53
юnity
Вот с ткаой ошибкой как бороться? Я пытаюсь отослать RPC в событии OnLeftRoom().
Cannot send messages when not connected. Either connect to Photon OR use offline mode! Так то id пересылаются другому клиенту, при нажатии на кнопку в апдейте, но когда их отправить лучше что бы мастерклайнт вышел, успев отослать? Вот такая функция
Используется csharp
[PunRPC]
void RewriteId(int id, string str)
{
foreach (GameObject go in arr) {
if(go.name == str)
go.GetComponent<PhotonView>().viewID = id;
}
}
А то получается что у обоих клиентов объекты с одинаковыми айди. На сервере непонятно что произойдёт.