[EXP] Unity 3D кастомный Inspector малой кровью. Атрибуты для инспектора.
Приветствую всех ценителей движка Юнити!
В прошлой статье я поделился своим опытом и мыслями касательно кастомного редактора для MonoBehaviour, в котором можно реализовывать всякое... Но кроме порой запутанного и времязатратного решения, дающего огромный визуальный и технический функционал, есть более простой вариант, заключающийся в использовании атрибутов, который позволяет систематизировать и представлять данные за считанные секунды.
Атрибуты в юнити определяют "поведение" классов/свойств и заключаются в квадратные скобки. Если нужно указать несколько атрибутов за раз, то они перечисляются через запятую: [attribute1, attribute2, attribute3].
Примеры использования атрибутов
Я создал тестовый скрипт в Юнити, в котором указаны наиболее частые атрибуты. Ниже вкратце опишу их суть, а для удобства повествования разделю на группы.
Вот как выглядит скрипт с атрибутами в инспекторе:
Атрибуты класса:
• AddComponentMenu("Вкладка/Название скрипта") - добавляет скрипт в меню компонентов.
• RequireComponent(typeof(Компонент)) - автоматически добавляет требуемый компонент объекту вместе с скриптом.
• SelectionBase - при нажатии на дочерние объекты движок будет выделять родительский (на котором висит скрипт).
Визуальные атрибуты:
• Header("Заголовок") - создает заголовок перед группой переменных.
• Space(Величина отступа) - добавляет отступ после переменной
Атрибуты для свойств:
• Tooltip("Текст подсказки") - показывает подсказку при наведении мышкой.
• SerializeField - отображает приватную переменную в инспекторе.
• HideInInspector - скрывает публичную переменную в инспекторе.
• TextArea - используется для string переменных. Добавляет поле для текста.
• Multiline - используется для string переменных. Добавляет поле для текста.
Функциональные атрибуты:
• ContextMenuItem("Название", "Метод в скрипте", order = порядковый номер) - вызывается контекстное меню при нажатии правой кнопки мыши.
• Range(от, до) - отображает слайдер для int или float.
• System.Serializable - помечает классы и структуры для их сериализации. Указав данный атрибут можно создать лист из Struct и редактировать его прямо в инспекторе.
Заключение
Вот такой инспектор, разбавленный заголовками, группами и простым функционалом может получиться, если мы будем использовать атрибуты и уделять внимание структуризации свойств. Иногда, чтобы расширить базовый функционал инспектора, совсем не обязательно прибегать к усложненным решениям, требующим особого внимания и глубоких знаний.
Старался не перегружать статью сложными терминами и надеюсь она окажется кому-то полезной. Если вы знаете какие еще атрибуты можно использовать на практике, был бы рад обмену опытом.
Благодарю за внимание) Будьте здоровы.