LeoECS Proto - выход в OpenSource

Спустя 2.5 года разработки LeoECS Proto переходит в OpenSource - теперь его можно использовать без подписки.

Благодаря подписчикам, за эти 2.5 года фреймворк развивался, обрастал функционалом и менялся под нужды его пользователей. Можно смело заявить, что на данный момент он не хуже своего предшественника LeoECS Lite, а в определенных моментах - сильно его превосходит:

  • Кодовая база фреймворка уменьшилась (на соизмеримом функционале), ее стало проще поддерживать и расширять. Пулы и итераторы теперь могут быть реализованы пользователем.
  • Появилась штатная поддержка модулей - пользовательской код теперь проще разделять и подключать в новые проекты.
  • Появилась штатная система нелинейного подключения систем - можно явно указывать контрольные точки интеграции.
  • Пулы теперь известны на старте мира и не могут быть добавлены в процессе намеренно или случайно.
  • Отсутствие фильтров - при большом их количестве (от сотни) и тысячах сущностей, попадающих в них, LeoECS Proto серьезно выигрывает по скорости (до х3 раз) при добавлении / удалении компонентов.
  • Из-за отсутствия фильтров снизилась скорость линейной итерации по сущностям - от 10% с небольшим линейным замедлением в зависимости от количества компонентов в мире. Компенсируется применением кеширующих итераторов.

Код ядра и всех расширений доступен на GitVerse:

  • Ядро Proto - содержит минимальный функционал с возможностью расширения его пользовательским кодом:
    • Поддержка кастомных пулов.
    • Поддержка кастомных итераторов.
    • Поддержка кастомных групп систем.
    • Поддержка модулей.
    • Отсутствие рефлексии.
  • Модуль улучшения "качества жизни" (Quality of Life) - содержит все "удобства", что базируются на апи ядра, но не должны там находиться:
    • Базовый DI аспект - автоматическое создание пулов/итераторов и их инъекцией в поля аспекта, может использоваться как составной итератор, использующий вложенные поля-пулы как выборку компонентов.
    • Инъекция данных в поля систем.
    • Поддержка сервисов с рекурсивной инъекцией данных в них, включая сами же сервисы.
    • Расширения для пулов - пустой ли он, сколько в нем элементов, получение первого элемента, итерирование по пулу без создания итератора.
    • 3 дополнительных спрособа записи итераторов - через обобщения, чейнинг, унифицированный список.
    • Кеширующие итераторы, позволяющие переиспользовать выборку в нескольких системах, если она не меняется.
  • Модуль интеграции в редактор Unity - поддержка работы с `Unity`:
    • Унификация сбора событий с MonoBehaviour в рантайме
    • Авторинг - сборка префабов из ECS-компонентов без необходимости создания MonoBehaviour-провайдеров.
    • Отладочное представление сущностей мира с возможностью редактирования данных компонентов через инспектор.
  • Модуль интеграции событий Unity Physics2D - поддержка событий 2D-физики в `Unity`.
  • Модуль интеграции событий Unity Physics3D - поддержка событий 3D-физики в `Unity`.
  • Модуль интеграции событий Unity uGui - поддержка событий uGui в `Unity`.
  • Модуль интеграции многопоточной обработки - поддержка многопоточных итераторов.
  • Модуль взаимоотношений "родитель-ребенок" для сущностей - поддержка иерархических нецикличных связей между сущностями с возможностью автоматического удаления всей иерархии при удалении "родителя".
  • Модуль группировки систем в блоки с условным выполнением - системы-контейнеры, позволяющие реализовывать блоки систем, которые будут выполняться или не выполняться на основании пользовательской логики.
  • Модуль UtilityAI - простая реализация `UtilityAI` для использования в `ECS`.
  • Модуль интеграции UtilityAI в Unity - поддержка правил для `UtilityAI` в виде `ScriptableObject` в `Unity`.

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

LeoECS Proto - это уже третий фреймворк в линейке. Каждый фреймворк расчитан на шестилетний цикл `развития`-`обслуживания`-`снятия с поддержки`:
ЭтапClassicLiteProto
Создание201820202023
Обслуживание202120242027
Конец жизни202320262029

Из таблицы видно, что LeoECS Proto “опоздал” на год, но так сложились обстоятельства. Сейчас 2025 год и это значит, что настало время появления следующей итерации в линейке LeoECS.
Новая версия называется ProtoN, т.к основана на базе LeoECS Proto, а буква N означает Nimlang. Да, новый фреймворк реализован на Nimlang, тестовая версия на C# есть, но она устарела и не поддерживается. Возможно, когда-нибудь, эта версия будет актуализирована и выложена в общий доступ в виде экспериментальной версии без поддержки, но таких планов пока нет. В одной из следующих статей немного опишу изменения, произошедшие в новой версии.

Актуальные версии пакетов доступны в GitVerse.