Хорошая практика для слоя отображения Unity

Любой объект на сцене так или иначе должен отображать данные. Рассмотрим пример**.

PlayerHPBar**: Частенько, в гайдах, нам предлагают писать PlayerHPManager, который содержит ссылки на картинку, текст, набор анимаций, тоглы и так далее. Этот же класс берет или подписывается на изменения характеристик персонажа, в общем как-то связывается с цифрами:

PlayerLogic => PlayerHPManager => Сцена

Плюсы:

  • Понятность
  • Низкий порог входа

Минусы:

  • Прослойка между сценой и данными начинает отвечать за несколько вещей: какие данные откуда брать, в какой момент, как именно это отображать
  • Изменения отображения тянет за собой изменение менеджера

Даже для игрушечного примера, можно увидеть много подводных камней. Как обновлять MaxHP, как обработать крайние случаи, как отобразить, что персонаж умер, в каком формате отобразить текст и т.д. Это все, как будто бы должно обрабатываться отдельно.

Я не буду рассказывать про чистый код, эта тема отдельная (см. SRP, SoC). Я лишь хочу предложить отделить ту саму часть, которая тянет текст, тоглы, слайдеры и т.д. в отдельный класс. Тогда схема будет такой:

PlayerLogic => PlayerHPManager => PlayerHPContainer => Сцена

Плюс ко всему, выделите отдельный общий класс Container который позволит вам подменять разные реализации для одних типов.

Плюсы:

  • Понятность сохраняется
  • Гибкость
  • Расширяемость и полиморфизм. Возможность подменять реализации
  • Меньше перегруженности

Минусы:

  • Чуть больше инфраструктурного кода
  • Есть особенности с размером кодовой базы на мобильных устройствах с дженериками
  • Требует дисциплины
  • Сложнее в отладке и "путешествиях" по коду

Многие вещи в коде были упрощены в угоду понятности. Если есть вопросы, задавайте.

Хорошая практика для слоя отображения Unity
Любой объект на сцене так или иначе должен отображать данные. Рассмотрим пример | Сетка — социальная сеть от hh.ru Хорошая практика для слоя отображения Unity
Любой объект на сцене так или иначе должен отображать данные. Рассмотрим пример | Сетка — социальная сеть от hh.ru Хорошая практика для слоя отображения Unity
Любой объект на сцене так или иначе должен отображать данные. Рассмотрим пример | Сетка — социальная сеть от hh.ru Хорошая практика для слоя отображения Unity
Любой объект на сцене так или иначе должен отображать данные. Рассмотрим пример | Сетка — социальная сеть от hh.ru