UNet. Хост теряет авторити над NPC.

Сеть в Unity3D

UNet. Хост теряет авторити над NPC.

Сообщение hottabych 17 июл 2018, 22:12

Запускаю хост и клиент.
Есть Non-Player объект (далее NPC), помеченный LocalPlayerAuthority (чтобы можно было назначить на него клиентский авторити). Если я назначаю авторити, я могу управлять им с клавиатуры.
Так вот, проблема в следующем.
Если я назначаю авторити на клиенте (AssignClientAuthority) и потом снимаю (RemoveClientAuthority), то контроль возвращается хосту. Это верно, поскольку он является сервером. Если я снимаю авторити с клиента, авторитет над объектом вернется на сервер, это логично.
Но если я назначаю и снимаю авторити на хосте -- хост теряет авторити. Свойство hasAuthority у NPC становится равным false, и я не могу управлять им, пока не выполню снова AssignClientAuthority.
В чем причина? По логике, если я снимаю авторити на хосте, hasAuthority не должно теряться, посколько хост -- это клиент, но он также и сервер, значит авторити возвращается на сервер, то есть на самого себя, следовательно, хост должен сохранить обладание этим объектом. Но этого не происходит. Спасибо, если смогли прочитать предыдущее предложение до конца.
Вот видосик, чтобы было понятнее
https://youtu.be/IxVkBhYl5VQ
Белый - это игрок (его не рассматриваем), зеленый - это NPC.
NPC изначально под сервером, и управляется. Потом назначаем на него клиентский авторитет - он опять управляется. Снимаем авторитет - теряет hasAuthority, перестает реагировать на нажатия клавиш. Хотя не должен, так как должен вернуться под сервер.
hottabych
UNITрон
 
Сообщения: 161
Зарегистрирован: 20 апр 2015, 12:52
Откуда: Тверь

Re: UNet. Хост теряет авторити над NPC.

Сообщение IDoNotExist 18 июл 2018, 09:09

hottabych писал(а):По логике, если я снимаю авторити на хосте, hasAuthority не должно теряться, посколько хост -- это клиент, но он также и сервер, значит авторити возвращается на сервер, то есть на самого себя, следовательно, хост должен сохранить обладание этим объектом.

А по моему, по логике ты явно говоришь хосту, чтобы он снял Authority и он его и снимает, а куда переходит - это уже загадка не прописанная в документации.
Аватара пользователя
IDoNotExist
Адепт
 
Сообщения: 1432
Зарегистрирован: 23 мар 2011, 09:18
Skype: iamnoexist

Re: UNet. Хост теряет авторити над NPC.

Сообщение Tolking 18 июл 2018, 10:12

И хост!=клиент, даже если они на одном компьютере.
Ковчег построил любитель, профессионалы построили Титаник.
Аватара пользователя
Tolking
Адепт
 
Сообщения: 2716
Зарегистрирован: 08 июн 2009, 18:22
Откуда: Тула

Re: UNet. Хост теряет авторити над NPC.

Сообщение hottabych 18 июл 2018, 13:32

А по моему, по логике ты явно говоришь хосту, чтобы он снял Authority и он его и снимает, а куда переходит - это уже загадка не прописанная в документации.

Да, я вчера с товарищем разбирался полдня, так и есть. Юнитеки устроили такую подлянку, что хост может сам себе Authority отключить.
Чтобы избежать этого, надо проверять: if(!isServer) CmdRemoveAuthority.
Если подключенный клиент снимает Authority, он переходит на сервер (т.е. хосту). Если хост снимает Authority, оно просто пропадает. Весьма неочевидный момент.
hottabych
UNITрон
 
Сообщения: 161
Зарегистрирован: 20 апр 2015, 12:52
Откуда: Тверь


Вернуться в Сеть

Кто сейчас на конференции

Сейчас этот форум просматривают: нет зарегистрированных пользователей и гости: 1