Страница 1 из 1

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

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

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

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

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

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

СообщениеДобавлено: 18 июл 2018, 10:12
Tolking
И хост!=клиент, даже если они на одном компьютере.

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

СообщениеДобавлено: 18 июл 2018, 13:32
hottabych
А по моему, по логике ты явно говоришь хосту, чтобы он снял Authority и он его и снимает, а куда переходит - это уже загадка не прописанная в документации.

Да, я вчера с товарищем разбирался полдня, так и есть. Юнитеки устроили такую подлянку, что хост может сам себе Authority отключить.
Чтобы избежать этого, надо проверять: if(!isServer) CmdRemoveAuthority.
Если подключенный клиент снимает Authority, он переходит на сервер (т.е. хосту). Если хост снимает Authority, оно просто пропадает. Весьма неочевидный момент.