Задача простая: игрок меняет цвет кузова и дисков. Скажу сразу, я не какой то гуру SOLID, GRASP и тд и тп, но я не люблю излишний код, костыли и размазанные по всему проекту решения. Мне нравится когда все структурно и с заделом на будущее, при это должно стабильно работать. Потому хотелось сделать это не «в лоб через UI», а с запасом на расширение и будущий магазин.
В итоге получилось так
- CarData хранит только выбор игрока - какой цвет кузова и дисков выбран.
- CarColorData содержит ID цвета, цену и сам цвет.
- Конфиг (ScriptableObject) перечисляет все доступные цвета: id, материал, цена.
- ColorTypeEnum - для унификации цветов
- CarCustomizationService не знает ни о UI, ни о деньгах. Он имеет конфиг цветов и накладывает материалы на машину, загружает и сохраняет выбранные цвета.
- CarCustomizationPanel - слой UI, который отображает доступные цвета, обновляет UI и обрабытывает клики кнопок
- СarColorButton - UI управляет ее состоянием и хранит данные о цвете.
- PurchaseService занимается только покупкой цветов и списанием валюты.
- CarCustomizationHandler применяет конечный цвет на машину, реагирует на события изменения и появления машин.
Что это даёт:
логика не размазана по кнопкам
систему легко расширять новыми типами кастомизации
можно без боли добавлять магазин и превью цветов - которые я уже добавил
код остаётся чистым и не превращается в спагетти
Делитесь впечатлениями и советами в чате
#RacingHeartDev #Unity #Game #Drift
Post #57
114
Racing Heart inc. Хочу показать, что получилось за сегодня 👇 Цвета теперь можно выбирать Сверстал базовый экран и добавил несколько вариантов. Цвет кузова и цвет дисков выбираются по отдельности - так удобнее и вариантов больше. Сначала хотел дать только готовые наборы,…
- 👍 6