📌 Вот что часто делает мидл, когда ещё не думает как senior:
1️⃣ Всё в одном MonoBehaviour
// И логика, и UI, и данные — всё в одном классе 😵
📌 Разделяй по слоям:
• Model — данные (например, ScriptableObject, runtime state)
• View — отображение и UI (MonoBehaviour с UI-ссылками)
• Controller/Manager — логика и управление
🧠 Это основа MVC / MVVM / ECS — двигайся в сторону слабосвязной архитектуры.
2️⃣ Прямые ссылки между объектами
enemy.healthBar.SetValue(enemy.hp); // жёсткая связь
📌 Лучше через:
• Action и event-события
• интерфейсы (например, IDamageable)
• ScriptableObject-сигналы (EventChannel)
• Service Locator / Dependency Injection (Zenject, Extenject)
3️⃣ Нет централизованного GameManager или FSM
📌 Когда логика разбросана по сцене — сложно дебажить, сохранять и управлять состоянием игры.
🛠️ Сделай GameState-машину:
GameState.Menu → GameState.Playing → GameState.Paused
Добавь централизованную точку входа:
• UIManager
• SceneController
• AudioManager
4️⃣ Мешанина из public переменных
public int hp; // открыто для всех
📌 Используй:
[SerializeField] private int hp;
public int HP => hp;
🧠 Это защищает от случайных изменений и делает код самодокументируемым.
5️⃣ Нет разделения Editor и Runtime
📌 Всё, что относится к редактору (например, EditorGUILayout, Handles, MenuItem) — в папку /Editor и под #if UNITY_EDITOR.
Если этого не сделать:
• код попадёт в билд (ошибка)
• появится ненужный вес
• сломается на мобильных/в WebGL
💡 Средний уровень — это уже мышление архитектора: ты создаёшь систему, которую другие смогут поддерживать, расширять и не бояться трогать.
💬 Хочешь пост про конкретные архитектурные подходы: EventBus, ScriptableSignals или Scene Flow?
🔔 Подписывайся — впереди про UI-архитектуру, async-менеджеры и паттерны уровня Senior
👉Akrus Games | Unity