Hytale Modding
Моддинг Hytale

Система компонентов сущностей

Базовое введение в СКС (Систему Компонентов Существ; ECS)

Warning

Для понимания данного руководства необходимо иметь базовые знания о концепциях ООП, таких как наследование.

Перед тем как приступить к чтению данного руководства, убедитесь, что вы хорошо понимаете эти понятия.

Info

В настоящее время данное руководство посвящено только теории 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), система выдает сообщение "Вы выиграли!".