Morpeh ECS Development
80 subscribers
20 photos
11 links
Русскоязычный канал о разработке ECS фреймворка для игрового движка Unity.
GitHub: https://github.com/scellecs/morpeh
Chat: @morpeh_development_chat
Author: @olegmrzv
Download Telegram
🚀 New Age Facility.

Всем привет! Новый поворот жизни и я снова возвращаюсь к кодингу конкретно на шарпах в Unity и дальнейшему развитию Морпеха.

Так как давно не было особо конкретных новостей, то я бы хотел сделать небольшой обзор текущего состояния, взгляда на будущее развитие и что вообще коммитилось в основной репозиторий.
🔥3
🔗 https://github.com/scellecs/morpeh

1. В текущем master вы можете наблюдать стабильный Morpeh 2020 года.

2. В develop есть версия с небольшими отличиями, часть из которых сегодня уже неочень актуальна.

3. Вся активная разработка сейчас ведется в ветке 2022-major.
На гитхабе есть Draft PR в котором можно отслеживать коммиты в эту ветку.
📚 Обзор новинок.
Кратко поделюсь об изменениях в 2022 версии, что сделано:

1. Installer теперь не sealed и от него можно наследоваться.

2. В системах добавлен шорткат, чтобы не писать this.World.Filter, можно писать просто this.Filter.

3. Добавлен Git Resolver, который позволяет подтягивать зависимые пакеты по гит урл в пакетном менеджере.

4. Улучшения для WorldViewer окна, чтобы можно было видеть несколько миров сразу.

5. Поддержка запуска Морпеха в чистом дотнет окружении без Unity.

6. У глобалов теперь нет NextFrame, только Publish, который публикует событие на следующий кадр как это раньше делал NextFrame. Такое изменение связано с тем, что во всех кодовых базах, что я видел события всегда публиковались связкой Publish+NextFrame.

7. Добавлен метод MigrateTo для сущностей, который позволяет переносить значения компонентов на другую энтити.

8. Добавлен CacheSize аттрибут, который можно вешать на компонент и выбирать стартовый размер кеша.

9. У фильтра исчезло поле Length и к нему на замену пришел метод IsEmpty() и для случаев, когда длина все-таки нужна ленивый метод GetLengthSlow(). Это позволило убрать лишнюю нагрузку из обновления фильтров.

10. Дефайн MORPEH_PROFILING, который позволяет более детально наблюдать в профайлере нагрузку от ецс кода без включение дип-профайлинга.

11. Сущности можно удалять прямым вызовом Dispose.

12. Переработаны архетипы под капотом, чтобы добиться максимальной скорости на обновлении фильтров и миграции энтити между фильтрами.

13. Кеши компонентов теперь можно получить прямо из мира и работать через них. Это альтернативная версия работы с фреймворком, похужую роль раньше выполняли ComponentsBag, но работа с кешами напрямую эффективнее, потому произошла полная замена старого API в этой области.

14. Работа над полной поддержкой работы с Jobs + Burst. В текущем состоянии можно итерироваться, получать компоненты и менять значения в них. Далее планы расширить до полного списка операций с энтити.

15. Для дебага можно подменять логгер Морпеха на свой кастомный.
🚧 Work In Progress.
Что планировалось сделать, но пока в сомнительном состоянии:

1. Кастомный сериализатор, чтобы полностью в удобном виде поддерживать хотрелоад и потенциальные роллбеки. Возможно эта идея будет переработана сразу на поддержку кастомного аллокатора, чтобы добиться высокой производительности. В драфтовых версиях реализация выглядела бесперспективно.

2. Замена Odin Inspector. Я нанимал отдельного разраба, чтобы он сделал простенький аналог так же на аттрибутах, но в результате у нас получился достаточно сложный код, который требует отдельной поддержки. Я остался недоволен этой задумкой и пока точно не решил для себя в каком векторе стоит решить задачу с инспектором. Возможно стоит сделать обычный рукописный инспектор прямо в ядре.

3. Разделение Морпеха на пачку пакетов. Отделить голое ядро от обвязки для редактора и остальных инструментов. Идея хорошая, но мне не нравится рутинный менеджмент пакетов, когда необходимо обновляться. Пока не вижу четкого решения, которое мне бы понравилось.
Какие планы?

Морпех всегда позиционировался как решение для бизнеса, чтобы писать сложное просто, помогать в решении задач.
Чистое и минималистичное API, широкий вспомогательный тулчейн и интеграция с движком из коробки. Это основные столпы и идеология фреймворка.
Здесь ничего не поменялось, Морпех прошел испытание временем, ворох разработаных игр.
Я испытывал большие сомнения достаточно долгое время на счет целесообразности и какой-то необходимости дальнейшего развития.
DOTS Entities рано или поздно выйдет и каким классным или наоборот плохим он бы не был, он вытеснит большинство ECS фреймворков специализирующихся на Unity.
Что-то похожее было с выходом UGUI, когда в ассет сторе было множество NGUI-подобных фреймворков. Они все так или иначе вымерли, но на замену к ним пришли другие.

В ближайшем будущем GameObjects и куча старого кода никуда не испарится, а какое-то развитие необходимо сегодня и завтра.
DOTS-стек слишком категоричный и слабо дружит с огромным наследием.

Морпех займет нишу посредника между MonoBehaviours <—> DOTS.
Прямо сегодня можно мигрировать любые проекты с монобехов на Морпех путем гибридного кода с постепенным вытеснением старого.
В дальнейшем с развитием Jobs&Burst интеграции, пойдет развитие интеграции и c Entities, удобного существования вместе.

Это позволит разрабатывать проекты с использованием кода под DOTS при этом не требуя вставать на жесткие рельсы бессылочного программирования.

Из ближайшего будущего я считаю категорически важным наличие инспектора независящего от Odin. Прошлый путь решения меня не удовлетворяет, потому скорее всего появится наивная лобовая реализация прямо в ядре, без аттрибутов.
Тогда текущий мейджер можно будет считать оконченым и он уйдет на спокойный саппорт как 2020 версия.
4
🔍 Current Version.
- Можно ли пользоваться Morpeh сегодня из ветки 2022-major?
- Если у вас есть Odin, то однозначно да.

Я буду здесь освещать все небольшие обновления в текущей версии, чтобы можно было понимать, что появилось и как это можно использовать уже сегодня.

Вопросы можно задавать в чате @morpeh_development_chat
🔖 2022.1.0-rc7

1. Исправлен двойной дизпоуз систем.
https://github.com/scellecs/morpeh/pull/128
2. Поправлено обновление фильтров на кейсах с Dispose и FixedUpdate.
https://github.com/scellecs/morpeh/pull/129

За правки спасибо @v_vlad_v
3🌭1
🔖 2020.8.2

Бекпорт правки в мастер. Проблема заключалась в том, что при использовании компонента с одним поля типа bool, морпех считал его маркером.
https://github.com/scellecs/morpeh/pull/135
🔥3
🚧 WIP Entity Generation

Связка ID+Gen в виде структуры давно обсуждается для реализации.
Это важная фича для использования энтитей в джобах, потому что ссылочные типы там использовать нельзя, а одного айди энтити не достаточно.

Фичу пилит @boikoigorigorevich
Прогресc и драфтовый вариант можно посмотреть тут:
https://github.com/scellecs/morpeh/pull/136
и подробности тут:
https://github.com/scellecs/morpeh/issues/85
👍2
🚀 2022.1.0-rc

Релиз очень близко!
Мы планируем зафиналить и выпустить новый мажор 1 ноября.

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

Релиз уйдет в мастер, девелоп снова станет основной веткой для разработки.
🔥8👍6
🚀 2022.1.0 - Halloween Edition

Наконец-то релиз 2022 версии спустя 2 года разработки.
Ссылка на чейнджлог: https://github.com/scellecs/morpeh/releases/tag/2022.1.0
Гайд по миграции прилагается, а так же есть в ридми.

🎉🥂🍾🎉
8🍾5🎉31🤩1
🔖 2022.1.1 - Фикс первого дня уже в мастере

1. Добавили .meta файл для CHANGELOG.MD
2. Пофиксили проблемы c работой на Unity 2019.4 LTS
🔖 2022.1.2

Исправлен метод MigrateTo().
После переработки на кеши метод начал неверно работать и сущности не меняли свои архетипы.
Фикс сделан @v_vlad_v
👍2
🔖 2022.1.3

Исправлен BurstDetector.
Он мог значительно понижать производительность Domain Reload (после изменения кода, выхода в плеймод).
🚀 2022.2.0 - Happy New Year Edition

Второй и последний мажор в уходящем году.
Ссылка на чейнджлог: https://github.com/scellecs/morpeh/blob/2022.2.0/CHANGELOG.MD
Гайд по миграции: https://github.com/scellecs/morpeh/blob/2022.2.0/MIGRATION_RU.md
Для тех, кто прикручивает к проектам на чистом дотнет, теперь есть официальный нюгет пекедж по ссылке:
https://www.nuget.org/packages/Scellecs.Morpeh

Всех с наступающим! Успехов и крутых релизов в следующем году! 🍾🥂🎉🎄
🎉15🔥1
🔖 2022.2.1

1. EntityProvider.map теперь публичный.
2. Ворнинги в Unity 2021+ теперь не вылезают.

https://github.com/scellecs/morpeh/tree/2022.2.1
🔖 2022.2.3

1. RemoveEntityOnDestroy теперь работает корректно.
2. Git LFS отключен. Старые версии можно будет скачать по окончанию месяца.
Ветки main, stage-2022.2, stage-2023.1 переведены на новый формат без лфс.
Рабочие версии, которые можно спокойно скачивать на текущий момент:
2022.2.3
2023.1.0-rc52

https://github.com/scellecs/morpeh/tree/2022.2.3
🔥7
🚀 2023.1.0 - Totally Free Edition

Морпех не имеет платных зависимостей, теперь мы используем Tri Inspector по-умолчанию. Для тех, кому нравится Odin могут оставаться на нем.

Добавлены аспекты.

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

Добавлены окно метрик, чтобы отслеживаться основные количественные показатели: сколько сущностей, архетипов, миграций, систем.

Небольшие переработки в нативной части.

Всё остальное в гайде по миграции.
https://github.com/scellecs/morpeh/blob/2023.1.0/MIGRATION_RU.md
🔥29
🔖 2023.1.1
Фокус релиза был направлены на фиксы и девиртуализацию стешей, что улучшит производительность.
Со списком можете ознакомиться по ссылке:
https://github.com/scellecs/morpeh/blob/2023.1.1/CHANGELOG.MD

Дальше как замыкающая версия под конец года выйдет 2024.1.0.
🔥22
🚀 2024.1.0 - Stability Edition

Вся версия была сосредоточена на внутренней переработке ядра. Большая часть кода покрылась Unit тестами с прицелом на крупные работы связанные с использованием кодогенерации в последующих версиях ядра.
Это повлекло за собой большое количество ломающих изменений, которые мы считаем важным для развития фреймворка.

С этой версии мы уходим от использование ScriptableObject для систем и Installer на GO как инструмента по-умолчанию. Оно всё еще остается в ядре, чтобы миграция была не такая неприятная.
Теперь ISystem и SystemsGroup это дефолтный инструмент до момента внедрения кодогенерации и полной девиртуализации вызовов систем.

Мы значительно уменьшили метаданные IL2CPP в рантайме, которые порождал фреймворк, что на больших проектах больно било по расходу оперативной памяти.
Относительно 2023 версии проделано много работы по оптимизациям (холостого хода, методов фильтров, стешей и так далее)

Переработано окно WorldBrowser, чтобы им было возможно пользоваться на крупных проектах, добавлена фильтрация как номеру сущности так и по компонентам.
Добавлена возможность во время брекпоинта посмотреть все компоненты на сущности.

Всё остальное в гайде по миграции и чейнджлоге.
https://github.com/scellecs/morpeh/blob/main/MIGRATION_RU.md
https://github.com/scellecs/morpeh/blob/main/CHANGELOG.MD
🔥36👍2🫡1