как синхронизировать переменную GameObject в фотонной сети?

введите здесь описание изображения

Я делаю сетевую игру, используя Unity. Я хочу настроить свою сеть с помощью PUN2. В частности, я замечаю, что могу синхронизировать несколько базовых переменных через метод OnPhotonSerializeView(). Однако сюда не входят пользовательские классы, такие как GameObject и Transform. Итак, что мне нужно сделать, чтобы синхронизировать целевое преобразование в этом представлении инспектора?


person Boosil-guy    schedule 20.03.2019    source источник


Ответы (1)


Есть несколько способов справиться с этим. Это зависит от того, для чего вам нужна эта цель, и от того, позволяет ли она существовать объекту на других клиентах, если он не является целью какого-либо объекта.

Предположим, у вас есть Player, который синхронизирован, а также синий и красный шары в сцене. У игрока есть мяч, который он «держит». Вы хотите запустить синхронизацию, чтобы на всех клиентах, если игрок держит красный шар, он будет удерживать его для всех клиентов, а если он держит синий шар, он будет делать это для всех клиентов.

Проблема с привязкой синего шара в одном клиенте ко всем синим шарам во всех остальных клиентах.

Вариант а) Дайте каждому шару имя и сделайте так, чтобы какой-нибудь статический словарь сопоставлял их имя с объектом на сцене (вы можете заставить их добавлять себя при пробуждении или начале шара). Теперь вы можете синхронизировать название мяча, который держит игрок (строка напротив объекта). Когда клиент получает изменение имени, вы можете обрабатывать изменение имени, просматривая его в статическом словаре и устанавливая его как удерживаемый мяч.

Вариант б) Синхронизируйте игрока И шары. Все, что связано с логикой, будет происходить только для текущего игрока. Таким образом, если локальный игрок держит мяч, позиция игрока будет синхронизирована, а позиция мяча будет синхронизирована, но для других игроков ничего не произойдет. Это, конечно, предполагает, что это работает для всего, чего вы пытаетесь достичь.

Вариант c) Сериализировать мяч. Отправьте данные, описывающие мяч (размер, цвет и т. д.), и создайте новый экземпляр на стороне клиента. Это НЕ будет привязано к каким-либо существующим шарам на стороне клиента. Вам может понадобиться проверить и уничтожить любой мяч, который уже удерживается. Это, вероятно, наименее эффективный способ добиться этого с точки зрения производительности.

person Tomer Shahar    schedule 20.03.2019