Skip to content

Latest commit

 

History

History
70 lines (59 loc) · 10.2 KB

MIGRATION_RU.md

File metadata and controls

70 lines (59 loc) · 10.2 KB

🚀 Migration Guide

Переход с версии 2022.2 на 2023.1

Breaking changes

  • Инициализацию Filter необходимо заканчивать методом Build(), например World.Filter.With<Component>().Build().
  • Удален ComponentProvider, если вы им пользовались, то можно скопировать его из старых версий или написать свой аналог.

New API

  • Как альтернатива Odin Inspector пришел Tri Inspector. Теперь у фреймворка нет платных зависимостей. Вы можете использовать оба варианта на выбор.
  • Добавлены аспекты. Это вспомогательные структуры, которые помогают делать срез из набора компонентов на сущностях. Подробнее в ридми.
  • Теперь можно полностью очистить стеш от компонентов вызвав stash.RemoveAll(). Удобно когда вы делаете OneFrame Components и уверены, что в какой-то момент никаких компонентов определенного типа не должно существовать в мире.
  • Для провайдеров добавлены методы деинициализации по аналогии с инициализацией.
  • World.JobHandle позволяет связывать джобы в рамках одной SystemsGroup. Подробнее в ридми.
  • Добавлены метрики для профайлера, которые позволяют следить за количеством сущностей, количеством архетипов и прочим. Подробнее в ридми.
  • Добавлен флаг и метод для проверки, что мир уже удален и он в невалидном состоянии. World.IsDisposed и World.IsNullOrDisposed() соответственно.
  • Добавлен дефайн MORPEH_DISABLE_SET_ICONS, чтобы отключать назначение иконок в редакторе у наследников провайдеров, систем и прочего.
  • Теперь метод World.Commit() проверяет, что не вызван внутри итерации по фильтру, потому что иначе это приведет к изменению фильтра.
  • Добавлен флаг World.DoNotDisableSystemOnException который позволяет не отключать системы, когда они выкидывают исключения в режиме отладки. На релизную версию никак не влияет.
  • Добавлен метод Filter.IsNotEmpty().

Odin Inspector

Вы можете продолжать использовать Odin Inspector или перейти на Tri Inspector.
Для этого вам необходимо добавить Tri Inspector по Git URL.
Удалить Odin, и удалить Odin Inspector дефайны из Player Settings.

Переход с версии 2022.1 на 2022.2

Breaking changes

  • Минимальная версия Unity поднята до 2020.3.* LTS
  • Неймспейсы изменены с Morpeh на Scellecs.Morpeh, Scellecs.Morpeh.Systems, Scellecs.Morpeh.Providers.
  • Глобалы выделены в отдельный пакет по ссылке https://github.com/scellecs/morpeh.globals.
  • Метод World.UpdateFilters() переименован в World.Commit().
  • Класс ComponentsCache<> переименован в Stash<>. Все методы для стешей утратили приставку Component, теперь просто Add, Get, Set, Has, Remove.
  • Фильтры валидируют, что в них нет повторяющих типов. Например на Filter.With<A>().With<A>() будет выведена ошибка.
  • Из систем удалено проперти Filter, вместо этого нужно использовать World.Filter.

New API

  • Добавлены ICleanupSystem подходящие для логики отчистки. По умолчанию вызываются самыми последними в LateUpdate.
  • Переработан механизм отчистки компонентов. Теперь компонент должен имплементировать IDisposable, и необходимо единожды вызвать у стеша метод AsDisposable, чтобы отчистка происходила. Например самый короткий вариант World.GetStash<T>().AsDisposable().
  • У World добавлен метод GetReflectionStash, чтобы получать стеш не через дженерик аргумент, а по System.Type.
  • Добавлен дефайн MORPEH_THREAD_SAFETY, который заставляет ядро валидировать, что все вызовы идут из того же потока в котором мир был создан. Привязку к треду можно изменить через методы World.GetThreadId(), World.SetThreadId().
  • Добавлено API для плагинов. Для использования нужно имплементировать IWorldPlugin.

Переход с версии 2020.* на 2022.1

Breaking changes

  • Асмдеф и ссылки изменены с XCrew.Morpeh на Scellecs.Morpeh. Неймспейсы те же, что и были.
  • Все глобалы утратили метод NextFrame. Вместо него теперь необходимо использовать метод Publish, который отправляет событие не в этот кадр, а в следующий как ранее делал NextFrame. Отправить событие в текущем кадре теперь невозможно, оно всегда отложенное. Это изменение связано с тем, что на всех проектах использовалась связка Publish + NextFrame, либо только NextFrame.
  • Entity.ID теперь возвращает не int, а структуру типа EntityID в которой содержаться поля id и gen. Это необходимое изменение для работы с Jobs и Burst. Так же добавлен метод World.TryGetEntity(EntityId entityId, out Entity entity), который позволяет проверить наличие сущности без прямой ссылки на нее.
  • Filter.Length удален полностью. Его заменила связка Filter.GetLengthSlow() и Filter.IsEmpty(). Это изменение связано с тем, что обновление кешированного значения длины для каждого фильтра давало большую нагрузку, а учитывая, что большинству фильтров не требовалось проверка на длину, то это была пустая нагрузка. Важный момент, что длина чаще всего использовалась для проверки на пустоту фильтра. Теперь получение длины дорогая операция, но проверка на пустоту такая же быстрая как и раньше. Это позволило сильно ускорить проекты с большим количеством фильтров.
  • Кеши компонентов теперь чистят данные после вызова entity.RemoveComponent() и читать данные по ref из компонента после его удаления теперь нельзя.
  • Итерирование по Filter теперь не гарантирует очередность. Если раньше ваша логика в проекте могла зависеть от того в каком порядке сущности попадают и удаляются из фильтра, то теперь необходимо от этого избавится.
  • Удален ComponentsBag. На его замену пришел полный публичный доступ к кешам компонентов ComponentsCache.

New API

  • Добавлены новые интерфейсы для компонентов IValidatable, IValidatableWithGameObject. Позволяет вызывать стандартный юнитевский метод OnValidate на компонентах, чтобы, например, проинициализровать поля в редакторе. Работает только для компонентов, добавленных через MonoProvider.
  • Добавлено нативное апи для работы с Job и Burst. Подробно о его работе можно прочитать в ридми. Теперь есть методы AsNative() для:
    • Archetype (NativeArchetype)
    • ComponentsCache (NativeCache)
    • FastList (NativeFastList)
    • IntFastList (NativeIntFastList)
    • Filter (NativeFilter)
    • IntHashMap (NativeIntHashMap)
    • World (NativeWorld)
  • Добавлен интерфейс IMorpehLogger и статический класс MLogger. Они позволяют переопределить логирование для Morpeh. Console.WriteLine для окружений кроме Unity по дефолту.
  • Добавлен дефайн MORPEH_PROFILING. Добавление его в Player Settings позволяет профилировать нагрузку от систем без Deep Profile.
  • Теперь Entity.Dispose() стал публичным методом. Это позволяет уничтожить энтити без прямого доступа к миру.
  • Отображение нескольких миров в World Browser