Unity [UNET] Синхронизация преобразования объектов, не являющихся игроками

У меня вопрос по системе UNET.

В сцене есть некоторые объекты, которые можно выбрать. Я хочу синхронизировать преобразование этого объекта, когда игрок его поднимает.

Объект имеет компонент NetworkIdentity с отмеченным LocalPlayerAuthority. У него также есть сценарий NetworkTransform, но преобразование синхронизируется только от хоста к клиентам, а не наоборот. Поэтому, если я перемещаю объект на стороне хоста, все клиенты видят изменение, но если клиент перемещает его, только этот конкретный клиент видит изменение. Что мне нужно сделать, чтобы синхронизировать его с обеих сторон?


person Milan Doležal    schedule 15.08.2016    source источник


Ответы (1)


Не беда, я уже решил эту проблему.

Что мне нужно было сделать, так это AssignLocalAuthority объекта, не являющегося игроком, с помощью объекта игрока.

person Milan Doležal    schedule 17.08.2016
comment
не хотите ли вы поделиться фрагментом кода в ответе? Я столкнулся с той же проблемой, но не знаю, как ее установить. Спасибо. - person Muhammad Faizan Khan; 07.02.2017
comment
В объекте игрока вызовите AssignLocalAuthority в командной функции (чтобы вызвать ее на стороне хоста) с параметром netId объекта, не являющегося игроком. Вы можете получить netId из компонента NetworkIdentity. Я назначаю полномочия объекту, не являющемуся игроком, подобно этому. Надеюсь поможет: NetworkManagerVR.Instance.localNetworkPlayer.CmdAssignObjectAuthority(GetComponent<NetworkIdentity>().netId); - person Milan Doležal; 08.02.2017
comment
Спасибо, но вы должны добавить это в ответ и для будущих пользователей. - person Muhammad Faizan Khan; 09.02.2017
comment
Я проверяю, что права доступа к неигровым объектам автоматически назначаются хосту. Это верно? потому что, если я создаю хост, я могу напрямую взаимодействовать с объектом, не являющимся игроком, и их позиция / вращение синхронизируются по сети плавно. в то время как то же самое не верно для клиента - person Muhammad Faizan Khan; 09.02.2017