Советы по архитектуре. Unity
1. OnValidate()
2. Max/Min value
3. If var ??= GetComponent
4. Find Duplicates of Enum
5. Отслеживать все объекты на сцене (не создавать пустые instantiate)
6. Использовать интерфейсы для методов.
7. Инициализация в 1 классе, вместо Awake
8. Использовать Scriptable object, только как конфиги
9. Отделять визуальную часть от логики
10. Реже использовать MonoBehaviour. Если нужен метод, то прокидывать любой Mono объект.
11. Используйте атрибуты Unity
12. RequireComponent(typeof())
13. Range(0,10)
14. Инкапсуляция - это не просто сокрытие полей, а исключение возможности повлиять на поле, ломающим игру способом (делать проверки в методе Get/Set)
15. Список - Ссылка, поэтому передавать его нужно как IEnumerable/IReadOnlyList
16. Extensions - var.gameObject.SetActive(true) => void Activate(component){component.gameObject.SetActive()}
17. Использовать не GameObject, а конкретный компонент
18. Отслеживать Instantiates
19. Перебирать объекты по иерархии (Elf:enemy, mag:enemy. Switch (enemy)