Введение
Приветствую.
В этих сериях статьях я расскажу о Entity-Component-System, изучим теорию и применим на практике, где создадим небольшой проект.
А сейчас о том, что такое ECS, принцип его работы и обозначим его преимущества и недостатки.
Термин ECS
Entity-Component-System (ECS) - это подход применяемый в разработке игр, который разделяет объекты на сущности, компоненты и системы. Именно эти три элемента и лежат в основе функционирования всего подхода.
Entity - представляет собой просто контейнера для компонентов. Аналог GameObject из Unity.
Component - это чистый набор данных, без методов и логики. Например - максимальное здоровье или скорость нашего героя.
System - чистая логика, которая обрабатывает компоненты. К примеру, система передвижения.
Принцип работы ECS
Чтобы понять как работает ECS в действие, разберём следующий пример:
Наша цель - создать передвижение персонажа. Для этого нам нужно знать где находится персонаж (Transform), направление движения (Direction) и с какой скоростью он должен перемещаться (Speed). Поэтому мы создаем TransformComponent, DirectionComponent и SpeeedComponent.
Далее мы создаем две системы: первая будет обрабатывать ввод с клавиатуры (InputSystem), а вторая будет отвечать за перемещение персонажа (MovementSystem). Обе системы выбирают из всех доступных сущностей те, которые имеют необходимые для их работы компоненты. Так, система InputSystem работает только с сущностями, имеющими компонент DirectionComponent. Система MovementSystem, в свою очередь, работает со всеми тремя компонентами. Затем обе системы применяют к выбранным компонентам заданную логику.
Это всё можно представить следующим образом:
Преимущества и недостатки ECS
Теперь стоит обсудить - чем же хорош и плох ECS подход в разработке.
Плюсы ECS:
- Низкая связность кода - элементы максимально абстрактны. Системы не знают о существовании других систем и их взаимодействии, поэтому при внесении изменений в код не возникает проблем с удалением, изменением или добавлением новых элементов.
- Оптимизация - ECS позволяет обрабатывать множество идентичных компонентов одной и той же логикой, что повышает производительность.
- Комбинирование свойств - возможность комбинировать различные компоненты.
- Разделение данных и логики - каждый компонент содержит определенный набор данных, а система отвечает за применение логики.
Минусы ECS:
- Обучение - требуется время, чтобы привыкнуть к этому подходу и научиться писать код в соответствии с его принципами.
- Низкая связность кода - если требуется тесное взаимодействие между элементами, могут возникнуть проблемы, поскольку сущности максимально абстрактны и изолированы друг от друга.
- Порядок систем - выполнение систем происходит строго последовательно, поэтому важно следить за порядком их выполнения и избегать вызова одной системы из другой.
Фреймворки для ECS
Для Ecs есть множество разных фреймворков. Кратко про популярные:
Entitas - является самым старым и до сих пор наиболее популярным решением для Unity и C# с поддержкой ECS. Однако поддержка проекта была прекращена.
LeoECS - это простая и минималистичная реализация с открытым исходным кодом, обладающей одной из лучших производительностью. В данный момент актуальной версией является LeoECSLite.
DOTS - стек, разработанный Unity, включающий в себе кроме Entity Component System, и другие инструменты, которые помогают оптимизировать производительность и упростить процесс разработки.
Установка LeoECS в Unity
Далее мы будем использовать LeoECSLite из-за его простоты использования.
Для установки ECS в проект, нужно зайти в раздел Package Manager. Попасть в него можно через верхнее меню (Window -> Package Manager)
Следующим шагом мы добавляем новый пакет с помощью ссылки на git. Указываем следующие ссылки:
Вот и всё. В вашем проекте установлен LeoECSLite, и теперь можете его использовать.
Заключение
В данной статье было рассмотрено понятие ECS (Entity-Component-System), а также принципы ее работы и преимущества использования. В следующей статье мы реализуем систему передвижения персонажа.