В прошлом посте я рассказал о плюсах ECS-архитектуры. Так как многие могли вообще не сталкиваться с таким подходом, решил начать с базы и рассказать вам, что такое ECS.
——
ECS (Entity Component System) — это не просто «особый стиль кода», а полноценный архитектурный паттерн, в основе которого лежит жёсткое разделение ответственности:
Entity (Сущность) — это просто ID, контейнер, на который навешиваются компоненты
Component (Компонент) — это только данные, без логики
System (Система) — это только логика, которая работает с компонентами
В отличие от классического ООП, где объект объединяет в себе и данные, и поведение, в ECS логика полностью отделена и работает сразу с группами данных.
🤷♂️ Как это работает?
Если сильно упростить, игровой цикл выглядит так:
- Есть мир (World)
- В мире есть сущности
- У сущностей есть наборы компонентов
- Системы выбирают нужные сущности по компонентам и выполняют над ними логику
То есть система не знает конкретный объект.
Она знает только: «мне нужны все сущности с такими компонентами».
В обычном Unity мне очень не нравилось то, что вы не можете работать со всей игрой сразу в одном месте:
- логика распылена по проекту
- нужны менеджеры на всё подряд
- для взаимодействия: теги, события, Unity Actions
❓Какие есть минусы в ECS❓
Главный минус — взаимодействие со сценой.
ECS-системы не интегрированы напрямую в Unity, из-за чего на объекты на сцене приходится делать отдельные монобехи, которые уже будут связывать сцену и систему.
Особенно проблематично делать физику объектов в ECS.
Хорошие ECS-фреймворки 😎
1. DragonECS
2. LeoECS
3. StaticECS
Все они лёгкие, быстрые и хорошо подходят для небольших и средних проектов.
——
Когда проект растёт, ECS не даёт коду превратиться в кашу.
Надеюсь, было полезно и интересно 😘