RU
ruDimbo
ruDimbo
104 подписчика
цели
5 из 250 платных подписчиков
Требуется 250 самоотверженных бойцов! Вместе мы справимся! :)

ECS - Архитектура динамических миров (free)

ECS архитектура позволяющая управлять комплексными структурами без экспоненциального повышения сложности поддержки и расширения проекта.
Но помимо банального удобства мы получаем следущее:
     - быстрое ядро, в связи с тем что структура ECS это обычный массив то мы можем эффективно использовать память процессора (да, именно его)
     - при правильно построенной работе с этим ядром, мы снижаем влияние сборщика мусора. Сборщик довольно прожорлив к ресурсам, лучше бы его не будить.
     - отделение логики от данных
     - отказоустойчивость
     - гибкость, мы можем легко добавлять и удалять свойства Entity и не "ломать" код
     - сумасшедшие возможности оптимизации
Готовая реализация (рабочий код) находится тут - https://boosty.to/rudimbo/posts/89d9e285-c5df-4166-84e9-f998fdab97d4
Советы по использованию:
     - не добавляйте методы в компоненты
     - не мутируйте данные, если в компоненте position свойство X = 0 (number) следите чтобы тип данных оставался прежним.
     - используйте быстрые методы перебора массивов (for)
     - оптимизируйте методы перебора. Где-то нужно пробежать по всем объектам, где-то только найти нужный или несколько и остановиться
     - старайтесь избегать вложенных for / foreach
     - не удаляйте entity из середины массива, либо пометьте как null либо сместите на последний индекс, после чего удаляйте.
Как создать ECS структуру?
Первым делом необходимо определить контейнер в котором будут находиться наши сущности (entity), это может быть массив или объект.
Этот контейнер обычно называют World и должен иметь функционал работы с сущностями, добавление, поиск, удаление, работа с компонентами, прикрепление их к сущности, удаление из сущностей.
Далее делаем сущность, она по сути является простым объектом с полями - id, components.
Итак компонент, основной двигатель ECS.
Делаем маленький, изолированный объект (ака класс) с названием характеризующим данные которые в нем будут лежать.
Помним что компонент ничего не умеет! Это чистые данные, как корзина для мусора.
Последнее звено в цепи ECS - система.
Логический блок, вот тут мы можем оторваться и написать логику игры.
Здесь можно почти всё! Бегаем по сущностям, изменяем данные в их компонентах, сравниваем перетасовываем, удаляем и т.д.
Поздравляю! Теперь вы знаете как создать ECS архитектуру для игры.
Моя реализация ECS (рабочий код) находится тут - https://boosty.to/rudimbo/posts/89d9e285-c5df-4166-84e9-f998fdab97d4

Уровни подписки

Воу Воу

$ 2,23 в месяц
- Все виды статей

Брат(сестренка) спокойно!

$ 3,4 в месяц
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов

Охохо тииииха!

$ 5,6 в месяц
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
- Доступ к базе кода (статьи с кодом)

Родной(ая) ты шо!

$ 11,2 в месяц
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
- Доступ к базе кода (статьи с кодом)
- Доступ к ассетам (арты, звуки)

АааААаААаА Тука!

$ 113 в месяц
Вы получите:
- Все виды статей
- Доступ к ранним версиям проектов
- Доступ к базе кода (статьи с кодом)
- Доступ к ассетам (арты, звуки)
- Не человеческая благодарочка от Деда ;)

Ахахаха, а шо?

$ 1 121 в месяц
Вы получите:
- Поздравляю, вы инвестировали в Деда
P.s. на случай если хочешь увидеть сурвач (игру мечты) от Димбыча
Наверх