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