Мы строим стратегическую игру в реальном времени на Unity и пытаемся уничтожить игровые объекты на сервере и клиентах по сети.
В настоящее время игрок всегда может уничтожить свои собственные объекты, а сервер может уничтожить все объекты. Но когда клиент пытается уничтожить объекты сервера (или других клиентов), он уничтожается только на этом клиенте. (Так как клиент не имеет ни Authority, ни объекта isLocalPlayer)
Мы пробовали разные подходы:
1. Использование Destroy (gameObject)
Это, очевидно, не сработает, поскольку уничтожается только локально.
2. Использование NetworkServer.Destroy (gameObject)
Это терпит неудачу, поскольку у нас нет полномочий.
3. Использование команды для уничтожения объекта
В тот момент, когда мы пытаемся вызвать на сервере команду, в которой мы уничтожаем объект, также происходит сбой. В связи с проверкой полномочий:
Попытка отправить команду для объекта без полномочий.
4. Первое назначение полномочий
Мы пытались назначить полномочия через
GetComponent<NetworkIdentity>().AssignClientAuthority(connectionToClient);
но получите сообщение об ошибке:
AssignClientAuthority можно вызывать на сервере только для порожденных объектов.
Попытка сделать это в Команде потерпит неудачу из-за пункта 3.
Существуют ли другие возможности уничтожения игровых объектов?
Как можно уничтожить игровые объекты?
Редактировать: Мы породили большинство объектов во время выполнения (в команде) через NetworkServer.SpawnWithClientAuthority
или NetworkServer.Spawn