Страница 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;
                }
        }

:p А то получается что у обоих клиентов объекты с одинаковыми айди. На сервере непонятно что произойдёт. :))