юnity писал(а):А по теме вопрос можно? А если всем клиентам компоненты PhotonView объектов сцены собрать в массив, обращаться к ним можно будет после смены мастерклайнта?
Ну вот например у нас есть боты (объекты сцены)
на геймобджекте бота префабе прописываем следующие -
Используется csharp
void OnPhotonInstantiate(PhotonMessageInfo info)
{
EnemyManager.bots.Add(transform);
}
Потом на объекте сцены прописываем такую функцию еще.Удаляем через rpc.allbufered
Используется csharp
[PunRPC]
void del()
{
EnemyManager.bots.Remove(transform);
if (PhotonNetwork.isMasterClient)
PhotonNetwork.Destroy(gameObject);
}
Вот тебе к примеру массив объектов сцены без файндов по фотонвиев. Файндить по фотонвиев нежелательно. Т.к. у тебя фотонвиев может быть не только на объектах сцены но и на фотон инстантиэйте(игроки) и порождаемые им объекты с помощью инстансов от фотона. Файндить лучше по нэймам типа скриптов объектов сцены если уж так надо.
Переключение мастер клиента не влияет на потерю структуры данных из массива объектов сцены в методе в котором я тебе предложил.
jimmm писал(а):а как это можно сделать примерно, не подскажете?
то есть если я уже знаю объект, как отправить команду у нового мастера? AllBufferedViaServer, я так понимаю?
как на другом устройстве инициировать скрипт смены id?
AllBufferedViaServer это вообще про другое.
оллвиасервер и оллвиабуфередсервер означает то что функции рпц всем будут рассылаться всегда в строгой определенной последовательности.
пример - если рпц олл функцию мастер клиентом рассылаем четверым игрокам то может быть так - сначала получил функцию второй игрок потом чевертый ,1 ,3 . Или может быть другая последовательность получения стека вызовов в комнате например 3,4,2,1 . А вот в рпц олл виа сервер последовательность получения всегда одинаковая.Правда Такой вариант рассылки методов немного медленней чем обычный рпц олл .
unity писал(а):Вот с ткаой ошибкой как бороться? Я пытаюсь отослать RPC в событии OnLeftRoom().Cannot send messages when not connected. Either connect to Photon OR use offline mode! Так то id пересылаются другому клиенту, при нажатии на кнопку в апдейте, но когда их отправить лучше что бы мастерклайнт вышел, успев отослать? Вот такая функция
Это адовый костыль) Это неправильная практика сетевого программирования) - отправлять сетевые данные во время выхода из комнаты.Всегда держи в голове что любые данные которые мы передаем по сети могут быть не быстрей секунды, а дольше секунды.Нету точных цифр.Нету стабильности.Логично что ты иногда можешь тупо не успеть разослать рпц всем до своего выхода из комнаты.Даже если ты сначала отправляешь сетевые данные и потом идет строчка фотоннетворклеаверум ты все равно можешь не успеть отослать их всем кому надо(например тому у кого в этой точке скакнул пинг с 60 до 150-200 а если еще и у нескольких скакнул то еще дольше рассылаешь рпц ).
Сначала отправляешь. Узнаешь что получил тот кому отправил и только потом выходишь(это в идеале). Но это так себе байда(крупно толсто получается). Для таких целей стабильней использовать лучше вот это OnPhotonPlayerDisconnected(PhotonPlayer otherPlayer) { ... } этот кулбек вызывается всем кроме того кто выходит. Выходит otherPlayer. Грубо говоря это и есть нечто похожее - "отправляю рпц всем когда я выхожу")).
Важно поймите следующие что в фотонкладуде работать с айди это плохой тон.Особенно там что то переприсваивать в айди постоянно. Это как бы не нужно.У фотон клауда высокая абстракция с айдишками. По поводу смены владельца фотонвиева есть спец. метод -
https://doc.photonengine.com/en-us/pun/ ... p-transfer.