Использование слоев, тегов и других констант Unity из кода
Unity
позволяет настраивать имена слоев, тегов, осей ввода и других констант через визуальное редактирование в редакторе. Как мы можем получить все эти данные из кода?
Это странно, но у нас нет полного доступа к подобной информации из кода, мы должны сами каким-то образом определять эти данные через строковые константы. использование строк-констант прямо в коде - не очень хорошая практика, лучше сделать отдельный класс-справочник, содержащий всю подобную информацию. Это позволит использовать именованные константы в intellisense редактора и даже рефакторить их в дальнейшем.
Хорошо, будем использовать константы как поля класса. Но ручное создание, проверка на актуальность, чистка старых значений руками каждый раз - слишком утомительно, как мне кажется. По этой причине я написал специальный генератор данных констант в виде расширения редактора - он сэкономил мне кучу времени. Генератор является частью моей библиотеки и доступен через главное меню редактора Unity
:
После запуска появится окно с настройками, каждая из которых может быть уникальной для текущего проекта. Можно указать путь до файла с константами относительно папки “Assets”, пространство имен для конечного класса и указать папки, которые должны быть проигнорированы при сканировании (Пути должны быть разделены знаком “;”).
Когда все настройки выставлены и нажата кнопка “Generate” - все значения будут автоматически сохранены в настройках проекта и будут восстановлены при следующем открытии окна - полезная особенность для следующей перегенерации констант с теми же настройками. По сути, перегенерация делается одной кнопкой.
Настройка “Options” определяет - что мы хотим получить в коде:
- Layers - Слои камеры / физики.
- Tags - Теги.
- Scenes - Сцены. Будут добавлены только те сцены, которые есть в списке
BuildSettings
. - Animators - Парметры из графов Animator-а.
- Axes - Оси ввода.
- Shaders - Параметры шейдеров. Параметры шейдеров, имена которых начинаются на “Hidden”, будут проигнорированы. Параметры с атрибутом
HideFromInspector
будут проигнорированы тоже. - SortingLayers - Слои сортировки в 2D-режиме.
Результатом сканирования и генерации будет файл с новым C#-классом внутри (содержимое файла будет полностью перезаписываться при каждой перегенерации):
1 | // Auto generated code, dont change it manually! |
Итак, мы можем использовать слои, теги, оси ввода из кода и через intellisense без опасений, что опечатаемся или будем использовать несуществующие данные.