Этот пост будет про Архитектуру
⌛️Время чтения 2 минуты
После завершения проекта решил применить полученные знания по архитектуре на практике. Взял видосик про 3 частых ошибки в архитектуре и не просто повторил, а доработал и зарефакторил с учётом полученных знаний.
Что было доработано:
1️⃣ Появился класс GameRunner, который позволяет запускать игру с любой сцены.
Это решает проблему, когда игра работала только со строго заданной сцены.
2️⃣ Добавлена специальная Initial сцена, которая запускается самой первой.
Она отвечает только за загрузку архитектуры (GameRunner, Bootstrap), а уже потом грузится основная сцена.
3️⃣ Создан класс SceneLoader - содержащий всю логику асинхронной загрузки.
Помимо загрузки сцены, он сообщает, когда операция была завершена, что удобно для последующих действий.
4️⃣ Логика инициализации геймплея переехала из Bootstrap в отдельный класс Game.
Теперь Bootstrap это загрузчик систем, а Game это уже сама игровая логика. Так архитектура становится чище и модульнее.
Список советов из видео:
1️⃣Контроль над игрой через Bootstrap 🎮
Раньше Awake у игрока и врагов вызывался в случайном порядке. Враги могли появиться раньше и не найдя игрока кинуть NullRef.
Теперь есть главный класс Bootstrap - единая точка входа. Он гарантирует порядок инициализации, сначала создается игрок, потом враги. Это даёт контроль над инициализацией.
2️⃣ Применение асинхронности с пользой⌛
Раньше корутины использовались в основном для создания задержки.
Теперь корутины используется для создания экрана загрузки. Показываем его, далее асинхронно грузим сцену/ресурсы, скрываем когда всё готово.
3️⃣Избавляемся от лишнего, выносим конфиги 🧹
Раньше спавнеры были MonoBehaviour, хотя им не нужны были его методы, а настройки были захардкожены в скриптах.
Теперь спавнеры это обычные C# классы. Логика была отделена от движка.
Настройки (префабы, координаты) были вынесены в конфиги в виде ScriptableObject.
Post #59
195
- ❤ 1
- 🤔 1
- 🤯 1