Как получить имя файла unity

Обновлено: 02.07.2024

Unity позволяет настраивать имена слоев, тегов, осей ввода и других констант через визуальное редактирование в редакторе. Как мы можем получить все эти данные из кода?

Это странно, но у нас нет полного доступа к подобной информации из кода, мы должны сами каким-то образом определять эти данные через строковые константы. использование строк-констант прямо в коде - не очень хорошая практика, лучше сделать отдельный класс-справочник, содержащий всю подобную информацию. Это позволит использовать именованные константы в intellisense редактора и даже рефакторить их в дальнейшем.

Хорошо, будем использовать константы как поля класса. Но ручное создание, проверка на актуальность, чистка старых значений руками каждый раз - слишком утомительно, как мне кажется. По этой причине я написал специальный генератор данных констант в виде расширения редактора - он сэкономил мне кучу времени. Генератор является частью моей библиотеки и доступен через главное меню редактора Unity :


После запуска появится окно с настройками, каждая из которых может быть уникальной для текущего проекта. Можно указать путь до файла с константами относительно папки “Assets”, пространство имен для конечного класса и указать папки, которые должны быть проигнорированы при сканировании (Пути должны быть разделены знаком “;”).


Когда все настройки выставлены и нажата кнопка “Generate” - все значения будут автоматически сохранены в настройках проекта и будут восстановлены при следующем открытии окна - полезная особенность для следующей перегенерации констант с теми же настройками. По сути, перегенерация делается одной кнопкой.

Настройка “Options” определяет - что мы хотим получить в коде:


  • Layers - Слои камеры / физики.
  • Tags - Теги.
  • Scenes - Сцены. Будут добавлены только те сцены, которые есть в списке BuildSettings .
  • Animators - Парметры из графов Animator-а.
  • Axes - Оси ввода.
  • Shaders - Параметры шейдеров. Параметры шейдеров, имена которых начинаются на “Hidden”, будут проигнорированы. Параметры с атрибутом HideFromInspector будут проигнорированы тоже.
  • SortingLayers - Слои сортировки в 2D-режиме.

Итак, мы можем использовать слои, теги, оси ввода из кода и через intellisense без опасений, что опечатаемся или будем использовать несуществующие данные.

В редакторе Unity вы изменяете свойства Компонента используя окно Inspector. Так, например, изменения позиции компонента Transform приведет к изменению позиции игрового объекта. Аналогично, вы можете изменить цвет материала компонента Renderer или массу твёрдого тела (RigidBody) с соответствующим влиянием на отображение или поведение игрового объекта. По большей части скрипты также изменяют свойства компонентов для управления игровыми объектами. Разница, однако, в том, что скрипт может изменять значение свойства постепенно со временем или по получению ввода от пользователя. За счет изменения, создания и уничтожения объектов в заданное время может быть реализован любой игровой процесс.

Обращение к компонентам

В UnityScript синтаксис немного отличается:

Как только у вас есть ссылка на экземпляр компонента, вы можете устанавливать значения его свойств, тех же, которые вы можете изменить в окне Inspector:

Дополнительная возможность, недоступная в окне Inspector - вызов функций экземпляра компонента:

Имейте ввиду, что нет причины, по которой вы не можете иметь больше одного пользовательского скрипта, присоединенного к одному и тому же объекту. Если вам нужно обратиться к одному скрипту из другого, вы можете использовать, как обычно, GetComponent, используя при этом имя класса скрипта (или имя файла), чтобы указать какой тип Компонента вам нужен.

Если вы попытаетесь извлечь Компонент, который не был добавлен к Игровому Объекту, тогда GetComponent вернет null; возникнет ошибка пустой ссылки при выполнении (null reference error at runtime), если вы попытаетесь изменить какие-либо значения у пустого объекта.

Обращение к другим объектам

Пусть иногда они и существуют изолированно, все же, обычно, скрипты отслеживают другие объекты. Например, преследующий враг должен знать позицию игрока. Unity предоставляет несколько путей получения других объектов, каждый подходит для конкретной ситуации.

Связывание объектов через переменные

Самый простой способ найти нужный игровой объект - добавить в скрипт переменную типа GameObject с уровнем доступа public:

Переменная будет видна в окне Inspector, как и любые другие:


Теперь вы можете перетащить объект со сцены или из панели Hierarchy в эту переменную, чтобы назначить его. Функция GetComponent и доступ к переменным компонента доступны как для этого объекта, так и для других, то есть вы можете использовать следующий код:

Кроме того, если объявить переменную с доступом public и заданным типом компонента в вашем скрипте, вы сможете перетащить любой объект, который содержит присоединенный компонент такого типа. Это позволит обращаться к компоненту напрямую, а не через игровой объект.

Соединение объектов через переменные наиболее полезно, когда вы имеете дело с отдельными объектами, имеющими постоянную связь. Вы можете использовать массив для хранения связи с несколькими объектами одного типа, но связи все равно должны быть заданы в редакторе Unity, а не во время выполнения. Часто удобно находить объекты во время выполнения, и Unity предоставляет два основных способа сделать это, описанных ниже.

Нахождение дочерних объектов

Иногда игровая сцена может использовать несколько объектов одного типа, таких как враги, путевые точки и препятствия. Может возникнуть необходимость отслеживания их в определенном скрипте, который управляет или реагирует на них (например, все путевые точки могут потребоваться для скрипта поиска пути). Можно использовать переменные для связывания этих объектов, но это сделает процесс проектирования утомительным, если каждую новую путевую точку нужно будет перетащить в переменную в скрипте. Аналогично, при удалении путевой точки придется удалять ссылку на отсутствующий объект. В случаях, наподобие этого, чаще всего удобно управлять набором объектов, сделав их дочерними одного родительского объекта. Дочерние объекты могут быть получены, используя компонент Transform родителя (так как все игровые объекты неявно содержат Transform):

Вы можете также найти заданный дочерний объект по имени, используя функцию Transform.Find:

Это может быть полезно, когда объект содержит дочерний элемент, который может быть добавлен или удален в игровом процессе. Хороший пример - оружие, которое может быть подобрано и выброшено.

Приветствую всех друзья! В прошлой статье я рассказал об окне Check for updates в Unity. Сегодня речь пойдет о методах ввода в редакторе Unity, и специальных именах папок, используемых для различных целей.

Картинка для привлечения внимания из открытых источников Картинка для привлечения внимания из открытых источников

Методы ввода в редакторе Unity.

Метод ввода ( IME ) - это компонент операционной системы или программа, которая позволяет пользователям вводить символы, не найденные на их устройстве ввода. Например, на компьютере это позволяет пользователю "западных" клавиатур вводить китайские, японские, корейские и индийские символы. На многих портативных устройствах, таких как мобильные телефоны, он позволяет с помощью цифровой клавиатуры вводить символы латинского алфавита.

Термин "метод ввода" обычно относится к определенному способу использования клавиатуры для ввода определенного языка, например, методу «Цанцзе» ( Cangjie ), методу «пиньинь» ( pinyin ) или использованию «мертвых» клавиш.

Unity обеспечивает поддержку IME , что означает, что вы можете писать символы, отличные от ASCII , во всех графических пользовательских интерфейсах. Этот метод ввода полностью интегрирован с движком, поэтому вам не нужно ничего делать, чтобы активировать его. Чтобы проверить его, просто измените язык клавиатуры на язык, не являющийся ASCII (например, японский), и просто начните писать.

Для получения дополнительной информации и оптимизации при написании символов, отличных от ASCII , проверьте параметр character в свойствах шрифта.

Специальные имена папок в Unity.

Обычно вы можете выбрать любое имя для папок, которые вы создаете, чтобы организовать свой проект Unity. Однако существует ряд имен папок, которые Unity интерпретирует как указание на то, что содержимое папки должно быть обработано особым образом. Например, вы должны разместить скрипты редактора в папке под названием Editor , чтобы они работали правильно.

Ниже я приведу полный список специальных имен папок, используемых Unity.

Assets.

Папка Assets - это основная папка, содержащая ресурсы, используемые проектом Unity. Содержимое окна проекта ( Project view ) в редакторе напрямую соответствует содержимому папки Assets . Большинство функций API предполагают, что все находится в папке Assets , и поэтому не требуют, чтобы это было упомянуто явно. Однако некоторые функции должны иметь папку Assets , включенную в качестве части пути (например, некоторые функции в классе AssetDatabase ).

Editor.

Скрипты, помещенные в папку с именем Editor , рассматриваются как скрипты редактора, а не как скрипты для игры. Эти скрипты добавляют функциональность редактору во время разработки и недоступны в сборках во время выполнения.

Вы можете иметь несколько папок редактора, размещенных в любом месте папки Assets . Поместите скрипты редактора в папку редактора или вложенную папку внутри нее.

Точное расположение папки редактора влияет на время, в течение которого ее скрипты будут компилироваться относительно других скриптов. Используйте функцию EditorGUIUtility.Load в скриптах редактора которая позволяет загружать ресурсы из папки Resources в папке Editor . Эти ресурсы могут быть загружены только с помощью скриптов редактора и удалены из сборок.

Editor Default Resources.

Скрипты редактора могут использовать ассеты, загруженные по требованию с помощью функции EditorGUIUtility.Load . Эта функция ищет ассеты в папке, называемой ресурсами редактора по умолчанию ( Editor Default Resources ).

У вас может быть только одна папка ресурсов редактора по умолчанию, и она должна быть размещена в корневом каталоге проекта, непосредственно в папке Assets . Поместите необходимые файлы ресурсов в эту папку ресурсов редактора по умолчанию или вложенную папку внутри нее. Всегда включайте путь вложенной папки в путь, переданный в EditorGUIUtility.Load , если ваши ассеты находятся в подпапках.

Gizmos.

Gizmos позволяют добавлять графику в представление сцены ( Scene View ), чтобы помочь визуализировать детали дизайна, которые в противном случае невидимы. Gizmos.DrawIcon помещает иконку в сцену, чтобы она действовала как маркер для специального объекта или позиции. Вы должны поместить файл изображения, используемый для рисования этого значка, в папку под названием Gizmos , чтобы он был выставлен с помощью функции DrawIcon .

У вас может быть только одна папка Gizmos , и она должна быть размещена в корне проекта, непосредственно в папке Assets . Поместите необходимые ассеты в эту папку Gizmos или вложенную папку внутри нее. Всегда включайте путь вложенной папки в путь, переданный к функции Gizmos.DrawIcon , если ваши ассеты находятся в подпапках.

Resources.

Вы можете загружать ассеты по требованию из скрипта вместо того, чтобы создавать экземпляры ассетов в сцене для использования в игровом процессе. Это можно сделать, поместив ресурсы в папку под названием Resources . Загрузите эти ассеты с помощью функции Resources.Load .

Вы можете иметь несколько папок ресурсов, размещенных в любом месте папки Assets . Поместите необходимые ассеты в папку ресурсов или вложенную папку внутри нее. Всегда включайте путь вложенной папки в путь, передаваемый функции Resources.Load , если ваши ассеты находятся в подпапках.

Обратите внимание, что если папка Resources является подпапкой редактора, то ресурсы в ней загружаются из скриптов редактора, но удаляются из сборок.

Standard Assets.

При импорте стандартного ассета (меню: Assets/Import Package ) ассеты помещаются в папку, называемую Standard Assets . Помимо того, что эти папки содержат ресурсы, они также влияют на порядок компиляции скриптов.

У вас может быть только одна папка Standard Assets , и она должна быть размещена в корне проекта, непосредственно в папке Assets . Поместите необходимые ассеты в эту папку или вложенную папку внутри нее.

StreamingAssets.

Возможно, вы захотите, чтобы ресурс был доступен в виде отдельного файла в его исходном формате, хотя чаще всего он непосредственно включается в сборку. Например, вам нужно получить доступ к видеофайлу из файловой системы, а не использовать его в качестве MovieTexture для воспроизведения этого видео на iOS . Поместите файл в папку под названием StreamingAssets , чтобы он был скопирован без изменений на целевую машину, где он затем будет доступен из определенной папки.

У вас может быть только одна папка StreamingAssets , и она должна быть размещена в корне проекта, непосредственно в папке Assets . Поместите необходимые файлы ресурсов в папку StreamingAssets или вложенную папку внутри нее. Всегда включайте путь к подпапке в путь, используемый для ссылки на потоковый ресурс, если ваши ассеты находятся в подпапках.

Hidden Assets.

Во время процесса импорта Unity полностью игнорирует следующие файлы и папки в папке Assets (или вложенной папке внутри нее):

  • Скрытые папки.
  • Файлы и папки, которые начинаются с ‘.’.
  • Файлы и папки, которые заканчиваются на"

Это используется для предотвращения импорта специальных и временных файлов, созданных операционной системой или другими приложениями.

На сегодня это все. Следующая статья будет посвящена поддержке редактирования нескольких сцен одновременно в окне Scene View . Спасибо всем, кто дочитал эту статью до конца, подписывайтесь на канал, ставьте лайки, а для тех, у кого появились вопросы - спрашивайте в комментариях! А если вы хотите помочь данному каналу в развитии – делитесь этой статьей с друзьями в социальных сетях!

Приветствую всех друзья! В прошлой статье я рассказал об окне Check for updates в Unity. Сегодня речь пойдет о методах ввода в редакторе Unity, и специальных именах папок, используемых для различных целей.

Картинка для привлечения внимания из открытых источников Картинка для привлечения внимания из открытых источников

Методы ввода в редакторе Unity.

Метод ввода ( IME ) - это компонент операционной системы или программа, которая позволяет пользователям вводить символы, не найденные на их устройстве ввода. Например, на компьютере это позволяет пользователю "западных" клавиатур вводить китайские, японские, корейские и индийские символы. На многих портативных устройствах, таких как мобильные телефоны, он позволяет с помощью цифровой клавиатуры вводить символы латинского алфавита.

Термин "метод ввода" обычно относится к определенному способу использования клавиатуры для ввода определенного языка, например, методу «Цанцзе» ( Cangjie ), методу «пиньинь» ( pinyin ) или использованию «мертвых» клавиш.

Unity обеспечивает поддержку IME , что означает, что вы можете писать символы, отличные от ASCII , во всех графических пользовательских интерфейсах. Этот метод ввода полностью интегрирован с движком, поэтому вам не нужно ничего делать, чтобы активировать его. Чтобы проверить его, просто измените язык клавиатуры на язык, не являющийся ASCII (например, японский), и просто начните писать.

Для получения дополнительной информации и оптимизации при написании символов, отличных от ASCII , проверьте параметр character в свойствах шрифта.

Специальные имена папок в Unity.

Обычно вы можете выбрать любое имя для папок, которые вы создаете, чтобы организовать свой проект Unity. Однако существует ряд имен папок, которые Unity интерпретирует как указание на то, что содержимое папки должно быть обработано особым образом. Например, вы должны разместить скрипты редактора в папке под названием Editor , чтобы они работали правильно.

Ниже я приведу полный список специальных имен папок, используемых Unity.

Assets.

Папка Assets - это основная папка, содержащая ресурсы, используемые проектом Unity. Содержимое окна проекта ( Project view ) в редакторе напрямую соответствует содержимому папки Assets . Большинство функций API предполагают, что все находится в папке Assets , и поэтому не требуют, чтобы это было упомянуто явно. Однако некоторые функции должны иметь папку Assets , включенную в качестве части пути (например, некоторые функции в классе AssetDatabase ).

Editor.

Скрипты, помещенные в папку с именем Editor , рассматриваются как скрипты редактора, а не как скрипты для игры. Эти скрипты добавляют функциональность редактору во время разработки и недоступны в сборках во время выполнения.

Вы можете иметь несколько папок редактора, размещенных в любом месте папки Assets . Поместите скрипты редактора в папку редактора или вложенную папку внутри нее.

Точное расположение папки редактора влияет на время, в течение которого ее скрипты будут компилироваться относительно других скриптов. Используйте функцию EditorGUIUtility.Load в скриптах редактора которая позволяет загружать ресурсы из папки Resources в папке Editor . Эти ресурсы могут быть загружены только с помощью скриптов редактора и удалены из сборок.

Editor Default Resources.

Скрипты редактора могут использовать ассеты, загруженные по требованию с помощью функции EditorGUIUtility.Load . Эта функция ищет ассеты в папке, называемой ресурсами редактора по умолчанию ( Editor Default Resources ).

У вас может быть только одна папка ресурсов редактора по умолчанию, и она должна быть размещена в корневом каталоге проекта, непосредственно в папке Assets . Поместите необходимые файлы ресурсов в эту папку ресурсов редактора по умолчанию или вложенную папку внутри нее. Всегда включайте путь вложенной папки в путь, переданный в EditorGUIUtility.Load , если ваши ассеты находятся в подпапках.

Gizmos.

Gizmos позволяют добавлять графику в представление сцены ( Scene View ), чтобы помочь визуализировать детали дизайна, которые в противном случае невидимы. Gizmos.DrawIcon помещает иконку в сцену, чтобы она действовала как маркер для специального объекта или позиции. Вы должны поместить файл изображения, используемый для рисования этого значка, в папку под названием Gizmos , чтобы он был выставлен с помощью функции DrawIcon .

У вас может быть только одна папка Gizmos , и она должна быть размещена в корне проекта, непосредственно в папке Assets . Поместите необходимые ассеты в эту папку Gizmos или вложенную папку внутри нее. Всегда включайте путь вложенной папки в путь, переданный к функции Gizmos.DrawIcon , если ваши ассеты находятся в подпапках.

Resources.

Вы можете загружать ассеты по требованию из скрипта вместо того, чтобы создавать экземпляры ассетов в сцене для использования в игровом процессе. Это можно сделать, поместив ресурсы в папку под названием Resources . Загрузите эти ассеты с помощью функции Resources.Load .

Вы можете иметь несколько папок ресурсов, размещенных в любом месте папки Assets . Поместите необходимые ассеты в папку ресурсов или вложенную папку внутри нее. Всегда включайте путь вложенной папки в путь, передаваемый функции Resources.Load , если ваши ассеты находятся в подпапках.

Обратите внимание, что если папка Resources является подпапкой редактора, то ресурсы в ней загружаются из скриптов редактора, но удаляются из сборок.

Standard Assets.

При импорте стандартного ассета (меню: Assets/Import Package ) ассеты помещаются в папку, называемую Standard Assets . Помимо того, что эти папки содержат ресурсы, они также влияют на порядок компиляции скриптов.

У вас может быть только одна папка Standard Assets , и она должна быть размещена в корне проекта, непосредственно в папке Assets . Поместите необходимые ассеты в эту папку или вложенную папку внутри нее.

StreamingAssets.

Возможно, вы захотите, чтобы ресурс был доступен в виде отдельного файла в его исходном формате, хотя чаще всего он непосредственно включается в сборку. Например, вам нужно получить доступ к видеофайлу из файловой системы, а не использовать его в качестве MovieTexture для воспроизведения этого видео на iOS . Поместите файл в папку под названием StreamingAssets , чтобы он был скопирован без изменений на целевую машину, где он затем будет доступен из определенной папки.

У вас может быть только одна папка StreamingAssets , и она должна быть размещена в корне проекта, непосредственно в папке Assets . Поместите необходимые файлы ресурсов в папку StreamingAssets или вложенную папку внутри нее. Всегда включайте путь к подпапке в путь, используемый для ссылки на потоковый ресурс, если ваши ассеты находятся в подпапках.

Hidden Assets.

Во время процесса импорта Unity полностью игнорирует следующие файлы и папки в папке Assets (или вложенной папке внутри нее):

  • Скрытые папки.
  • Файлы и папки, которые начинаются с ‘.’.
  • Файлы и папки, которые заканчиваются на"

Это используется для предотвращения импорта специальных и временных файлов, созданных операционной системой или другими приложениями.

На сегодня это все. Следующая статья будет посвящена поддержке редактирования нескольких сцен одновременно в окне Scene View . Спасибо всем, кто дочитал эту статью до конца, подписывайтесь на канал, ставьте лайки, а для тех, у кого появились вопросы - спрашивайте в комментариях! А если вы хотите помочь данному каналу в развитии – делитесь этой статьей с друзьями в социальных сетях!

Читайте также: