Найти в Дзене

Entity Component System в Unity - Что это такое?

Оглавление

Введение

Приветствую.

В этих сериях статьях я расскажу о 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, в свою очередь, работает со всеми тремя компонентами. Затем обе системы применяют к выбранным компонентам заданную логику.

Это всё можно представить следующим образом:

Схема работы нашего примера в Entity Component System
Схема работы нашего примера в Entity Component System

Преимущества и недостатки ECS

Теперь стоит обсудить - чем же хорош и плох ECS подход в разработке.

Плюсы ECS:

  1. Низкая связность кода - элементы максимально абстрактны. Системы не знают о существовании других систем и их взаимодействии, поэтому при внесении изменений в код не возникает проблем с удалением, изменением или добавлением новых элементов.
  2. Оптимизация - ECS позволяет обрабатывать множество идентичных компонентов одной и той же логикой, что повышает производительность.
  3. Комбинирование свойств - возможность комбинировать различные компоненты.
  4. Разделение данных и логики - каждый компонент содержит определенный набор данных, а система отвечает за применение логики.

Минусы ECS:

  1. Обучение - требуется время, чтобы привыкнуть к этому подходу и научиться писать код в соответствии с его принципами.
  2. Низкая связность кода - если требуется тесное взаимодействие между элементами, могут возникнуть проблемы, поскольку сущности максимально абстрактны и изолированы друг от друга.
  3. Порядок систем - выполнение систем происходит строго последовательно, поэтому важно следить за порядком их выполнения и избегать вызова одной системы из другой.

Фреймворки для ECS

Для Ecs есть множество разных фреймворков. Кратко про популярные:

Entitas
Entitas

Entitas - является самым старым и до сих пор наиболее популярным решением для Unity и C# с поддержкой ECS. Однако поддержка проекта была прекращена.

Автор - Leopotam
Автор - Leopotam

LeoECS - это простая и минималистичная реализация с открытым исходным кодом, обладающей одной из лучших производительностью. В данный момент актуальной версией является LeoECSLite.

Unity
Unity

DOTS - стек, разработанный Unity, включающий в себе кроме Entity Component System, и другие инструменты, которые помогают оптимизировать производительность и упростить процесс разработки.

Установка LeoECS в Unity

Далее мы будем использовать LeoECSLite из-за его простоты использования.

Для установки ECS в проект, нужно зайти в раздел Package Manager. Попасть в него можно через верхнее меню (Window -> Package Manager)

Package Manager в разделе Window
Package Manager в разделе Window

Следующим шагом мы добавляем новый пакет с помощью ссылки на git. Указываем следующие ссылки:

Добавление URL на Git
Добавление URL на Git

Вот и всё. В вашем проекте установлен LeoECSLite, и теперь можете его использовать.

Заключение

В данной статье было рассмотрено понятие ECS (Entity-Component-System), а также принципы ее работы и преимущества использования. В следующей статье мы реализуем систему передвижения персонажа.