Накладные расходы на однопользовательскую сеть Unity3D HLAPI

Использование высокоуровневого сетевого API (HLAPI) движка Unity3D кажется подходом «все или ничего». Для любых игровых объектов, которые, как ожидается, будут использоваться в многопользовательской игре, (большинство) вариантов поведения должны быть реализованы как NetworkBehaviours, и требуются сетевые компоненты. Кроме того, во всех сценах требуется сетевой менеджер. Я бы предпочел не дублировать сетевые версии всех ресурсов для одного игрока, и кажется, что ожидаемая практика заключается в том, чтобы однопользовательская игра была реализована как сетевая игра на основе хоста LAN только с одним (localhost) клиент.

Меня беспокоит то, что HLAPI, наложенный поверх абсолютно всего, приведет к значительным накладным расходам в однопользовательском режиме, который является основным направлением игры. Это обоснованное беспокойство?

Я рассмотрел несколько методов смягчения последствий, но они создают свои собственные проблемы с точки зрения удобства обслуживания и сложности кода:

  • Префабы, необходимые в обоих режимах, будут продублированы (нарушает DRY: изменения в одном префабе необходимо вручную отразить в другом)
  • Динамически изменять или заменять однопользовательские активы многопользовательскими или наоборот (сложно и потенциально подвержено ошибкам)

Каковы некоторые лучшие методы смягчения? Или они вообще нужны?


person Eric Hughes    schedule 16.12.2015    source источник


Ответы (1)


Это довольно старый вопрос, но я думаю, что все равно побегу. Можете ли вы определить, когда вы находитесь в одиночном режиме, и в этом случае использовать Destroy для удаления компонентов, которые вам не нужны? Например:

http://answers.unity3d.com/questions/378930/how-delete-or-remove-a-component-of-an-gameobject.html

person Bruce Van Horn    schedule 21.11.2016
comment
К сожалению, это не вопрос простого удаления компонентов: MonoBehaviour, предназначенные для сетевого состояния в HLAPI (на момент написания этого вопроса), должны быть NetworkBehaviour и работать с сетевыми компонентами. Уничтожьте сетевые компоненты, и вы не только удалите мусор, но и вообще запретите работать всем своим сетевым поведениям. - person Eric Hughes; 21.11.2016