Система компонентов сущностей
Базовое введение в СКС (Систему Компонентов Существ; ECS)
Для понимания данного руководства необходимо иметь базовые знания о концепциях ООП, таких как наследование.
Перед тем как приступить к чтению данного руководства, убедитесь, что вы хорошо понимаете эти понятия.
В настоящее время данное руководство посвящено только теории ECS и не содержит примеров кода
Примеры кода намеренно опущены, чтобы избежать несоответствий с тем, как будет реализована система ECS в Hytale.
Вступление
Система компонентов сущностей, также известная как ECS, представляет собой шаблон проектирования в разработке игр.
ECS состоит из Entity (сущностей), которые содержат Component (компоненты), и System (систем), которые работают с этими сущностями.
Также ECS делает упор на композицию вместо наследования, устраняя жёсткий упор на иерархию. Это помогает отделить данные от поведения и облегчает повторное использование компонентов.
Композиция вместо наследования
Прежде чем разбирать, из чего состоит ECS, давайте сначала поймём философию ECS.
Можно описать композицию как "имеет X", а наследование - как "является X".Когда мы наследуем класс в Java, мы наследуем все его атрибуты и методы, в то время как в композиции мы можем выбрать для каждой сущности, на что он ссылается и какие системы будут на нем работать.
Сущности, компоненты и системы
Сущности
Сущность - это просто уникальный идентификатор.
- Не содержит данных.
- Не имеет логики.
Представьте себе сущности как существительные, которые можно описать с помощью компонентов
Компоненты
Компоненты - это просто контейнеры данных.
- Они хранят только данные
- Они не содержат поведения или логики
- Они описывают черты или аспекты сущности
Примеры компонентов:
- Компонент 'Position' хранит координаты X, Y и Z.
- Компонент 'Velocity' хранит скорость по каждой оси
- Компонент 'Health' хранит значение текущего состояние здоровья сущность
Представьте себе компоненты как прилагательные, описывающие сущность
Системы
Системы содержат логику вашей игры (или, в данном случае, мода).
- Он работает со всеми сущностями, которые имеют определенный набор компонентов
- Не хранит сами данные сущностей
- Применяет поведение путем чтения и изменения данных компонента
Для примера:
- "WinConditionSystem" может обрабатывать каждый сущность, содержащий компоненты "Position" и "Velocity"
- Если сущность достигает позиции
(0, 0, 0), система выдает сообщение "Вы выиграли!".