Unity 6.3
0 онлайн 106 гостей 3 в системе
Вход
Ассеты и медиа Шаг 73 из 148

Обновление базы данных ассетов

Unity обновляет Базу Данных Ассетов в следующих ситуациях:

  • Когда Unity Editor возвращается в фокус (если вы включили Auto-Refresh в окне Настройки)
  • При выборе Assets > Refresh из меню.
  • Когда вы вызываете AssetDatabase.Refresh из кода. Некоторые другие AssetDatabase APIs вызывают обновление, но только для ассетов, которые вы указываете.

Обновить процесс

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

  1. Проверьте, не были ли добавлены, изменены или удалены какие-либо файлы в папках Assets и Packages со времени последней проверки, и обновите Базу данных ассетов соответствующим образом.
  2. Импорт и компиляция файлов, связанных с кодом, таких как .dll, .asmdef, .asmref, .rsp и .cs.
  3. Перезагрузить скриптовый доменесли Refresh не был вызван из скрипта.
  4. Последующая обработка всех ассетов для импортированных файлов, связанных с кодом.
  5. Импортировать ассеты, не связанные с кодом, и после обработки всех остальных импортированных ассетов.
  6. Горячая перезагрузка ассетов.

Перезапуск процесса обновления

Unity перезапускает процесс обновления базы данных ассетов, если:

  • Импорт ассета не удалось.
  • После импорта файл, использованный импортером, изменился на диске.
  • В OnPostProcessAllAssets, вы вызываете любое из следующих действий:
  • Время последнего изменения импортируемого файла меняется во время его импорта. Это может произойти, если вы начинаете извлекать файлы из системы управления версиями, когда Редактор находится в фокусе.
  • Импортер создает файл в середине импорта. Например, модели FBX могут перезапустить обновление, извлекая текстуры из модели.
  • Перезагрузка сборки происходит после компиляции скриптов. Если вы создаете файл C# во время процесса обновления, этот новый файл должен быть компилирован.
  • Вы сохраняете ресурс как Текст только, но ресурс должен быть сериализирован в двоичном формате. Например, сцены с рельефами в них должны быть сериализированы в двоичном формате, поскольку данные рельефа будут громоздкими, если их просмотреть как массив символов в текстовом файле.

Отслеживание зависимостей

База данных ассетов отслеживает два типа зависимостей ассетов: static dependencies и динамические зависимости. Если какая-либо зависимость ассета изменяется, то Unity реимпортирует ассет.

Статические зависимости

Статическая зависимость — это значение, настройка или свойство, от которого зависит импортёр. Статические зависимости известны до импорта ассета и не зависят от поведения импортёра в ходе импорта. Если какая-либо статическая зависимость ассета меняется, Unity импортирует ассет заново.

Статические зависимости включают:

  • Имя ассета.
  • ID импортера, связанного с ассетом.
  • Версия импортера.
  • Выбранная в данный момент целевая платформа сборки.

Динамические зависимости

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

Импортер может также использовать глобальное состояние в зависимости от содержимого исходного ассета — в этом случае оно тоже становится динамической зависимостью. Примеры: целевая платформа, цветовое пространство проекта, графический API, версия среды выполнения скриптов или состояние сжатия текстур.

Unity хранит динамические зависимости ассета в AssetImportContext.

Импорт и компиляция файлов, связанных с кодом

В списке изменённых или добавленных файлов Unity собирает те, которые относятся к коду, и отправляет их в конвейер компиляции скриптов. Компилятор генерирует сборки из файлов скриптов и файлов определения сборок в вашем проекте. Более подробную информацию об этом шаге см. в Организация скриптов в сборки.

Импорт ассетов, не связанных с кодом

Импортер каждого ассета обрабатывает этот тип ассета и идентифицирует файлы для импорта на основе расширений файлов. Например, TextureImporter отвечает за импорт .jpg, .png и .psd файлов, среди прочих.

Существуют две категории импортеров:

  • Нативные импортеры: встроенные в Unity импортеры.
  • Скриптовые импортеры: Пользовательские импортеры, которые расширяют возможности импорта Unity. Они написаны на C#.

Unity обрабатывает сначала все импортеры, а затем все импортеры, созданные с помощью сценариев, в отдельной фазе.

Предварительная обработка и последующая обработка

AssetPostprocessor класс предоставляет набор обратных вызовов, позволяющих выполнять работу до импорта (предобработка) и после него (постобработка) для разных типов ассетов. Подробности об этих обратных вызовах и примеры использования см. в AssetPostprocessor Ссылка API.

Горячая перезагрузка

Горячая перезагрузка — это процесс применения изменений к скриптам и ресурсам, пока Редактор открыт. Это может произойти, когда Редактор находится в режиме воспроизведения или режиме редактирования, и не требует перезапуска Редактора для вступления изменений в силу.

Когда вы изменяете и сохраняете скрипт, Unity перезагружает все данные скрипта проекта. Сначала он сохраняет значения сериализуемых переменных во всех загруженных скриптах, перезагружает скрипты, а затем восстанавливает значения. Данные, хранящиеся в несериализуемых переменных, теряются.

Это затрагивает все окна редактора и все скрипты MonoBehaviour в проекте. В отличие от остальных случаев сериализации, при перезагрузке Unity по умолчанию сериализует и закрытые поля, даже если у них нет SerializeField атрибут.

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