Unity 6.3
0 онлайн 20 гостей 3 в системе
Вход

Введение в свойства Unity

Unity Properties — это система, которая позволяет исследовать и модифицировать свойства типов C# во время выполнения. Она использует API в стиле посетителя, который обходит свойства графа объекта предсказуемым, контролируемым образом.

Вы можете использовать свойства Unity для чтения и записи типов C# в общем виде, с минимальным обращением с типами. Это позволяет работать с пользовательскими типами C# и, например, проверять их или преобразовывать между различными представлениями.

Unity Свойства позволяют избежать или минимизировать отражение, которое относительно медленно, выделяет память (что увеличивает нагрузку на сборщик мусора) и имеет ограниченную поддержку, особенно на платформах, которые требуют предварительной (AOT) компиляции с IL2CPP.

Свойства Unity могут быть полезны в следующих типичных сценариях:

  • Проверка и обработка данных:
    • Пересечение графа объектов для проверки диапазонов, нулей, ссылок или применения ограничений.
    • Вычисление различий, хэшей или обнаружение изменений в свойствах.
  • Копирование, клонирование и патч:
    • Глубинное копирование контейнеров или применение патчей путем посещения и копирования конкретных свойств.
  • Преобразование данных автора в данные времени выполнения:
    • Например, преобразование конфигурационных данных ScriptableObject в структуры времени выполнения) с помощью перехода через свойства.

Основные особенности

Фреймворк Unity Properties имеет следующие основные возможности, которые можно использовать для общей обработки данных типа C#:

  • Сумки для имущества: год IPropertyBag<T> описывает поля и свойства типа T. Unity генерирует пакеты свойств, чтобы система могла перечислить свойства вашего типа.
  • Visitors: Вы реализуете посетителя с обратными вызовами, такими как Visit<TContainer, TValue>. Фреймворк проходит через свойства контейнера и вызывает логику по каждому свойству.
  • Адаптеры: ловушки, которые настраивают, как конкретные типы посещаются или преобразуются (например, специальная обработка для Vector3, энумов, коллекций).
  • Пути свойств и перемещение: Поддержка вложенных контейнеров, массивов, словарей и адресации значений через пути с контролируемой глубиной и параметрами.

Более подробные примеры совместного использования этих функций см. в Используйте PropertyVisitor для создания посетителя объекта и Используйте низкоуровневую APIs для создания посетителя объекта.

Дополнительные ресурсы