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

Проверка согласованности процесса импорта

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

В База данных ассетов предусмотрены следующие способы проверки согласованности и детерминированности результатов импорта ресурсов проекта:

Повторный импорт ассетов вручную

Повторный импорт ассета вручную заставляет Unity проверить, соответствует ли новый результат импорта предыдущим кэшируемым результатам импорта.

Чтобы запустить повторный импорт вручную, выберите ресурс и выполните одно из следующих действий.

  • Щелкните ассет правой кнопкой мыши и выберите Реимпорт из контекстного меню.
  • Перейдите в Ассеты > Реимпорт.

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

Importer(<name of importer>) generated inconsistent result for asset(guid:<guid of the asset>) "<name of asset>"

При повторном импорте корневого ассета Unity также повторно импортирует и выполняет проверку согласованности его дочерних ассетов.

Запуск проверок согласованности с помощью командной строки

Чтобы выполнить проверку всех ассетов и импортеров в вашем проекте, откройте Unity Editor с -consistencyCheck аргумент командной строки. Unity затем регистрирует любые несоответствия, обнаруженные во время запуска, в консоли и файле журнала Редактора.

Аргумент -consistencyCheck имеет следующие режимы:

  • -consistencyCheckSourceMode local: Проверка на соответствие локальному результату на диске в папке Library.
  • -consistencyCheckSourceMode cacheserver: Проверка на сервере кэша ускорителя Unity.

Если аргумент -consistencyCheckSourceMode не передан, Unity выполняет локальную проверку.

При использовании -consistencyCheckSourceMode cacheserverпроверка согласованности проверяет только импорты ассетов, которые могут быть кэшированы. Например, если вы отключите кэширование для экземпляра ScriptedImporter, проверка согласованности для этого импорта также будет отключена. Дополнительные сведения об отключении кэширования для скриптового импортера см. в AssetImporters.ScriptedImporterAttribute.

Важно: Если вы используете аргумент cacheserver и ускоритель Unity недоступен или не настроен, то проверка соответствия печатает предупреждения в журнале редактора о том, что сервер кэша недоступен. Кроме того, если вы используете ускоритель Unity в качестве источника, Unity отключает загрузки на сервер кэша, чтобы предотвратить загрузку результата, который вы собираетесь проверить.

Вывод журнала редактора

Когда Unity обнаруживает несоответствия импортера, вы можете найти дополнительную информацию о проблеме в Журнал редактораЭто включает такую информацию, как:

  • Какой ассет вызвал неудачную проверку согласованности и его GUID.
  • Хеш содержимого для результата импорта ассета.
  • Сравнение с предыдущим пересмотром ассета.

Чтобы открыть журнал:

  1. Откройте Консоль окно (Окно > Общие положения > Консоль).
  2. Выберите меню Дополнительно (a) и выберите Открыть Журнал Редактора.

В журнале редактора несоответствия отображаются в следующем формате:

ConsistencyChecker - guid: <asset_guid>, dependenciesHash.value: <dep_hash_a>, importResultID: <result_id_a>, producedFiles[0].extension: , producedFiles[0].contentHash: <content_hash_a>

ConsistencyChecker - guid: <asset_guid>, dependenciesHash.value: <dep_hash_a>, importResultID: <result_id_b>, producedFiles[0].extension: , producedFiles[0].contentHash: <content_hash_b>

ConsistencyChecker - guid: <asset_guid>, dependenciesHash.value: <dep_hash_a>, importResultID: <result_id_b>, producedFiles[0].extension: , producedFiles[0].contentHash: <content_hash_b>

Importer(<importer_name>) generated inconsistent result for asset(<asset_guid>) <asset_path>

Пример несогласованного журнала результатов

В следующем примере два кэшированных результата имеют одно и то же значение dependenciesHash, но разные значения importResultID и разные хэши содержимого. Это означает, что импортер произвел разный выход из одного и того же входа:

ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 07078a054d3f597b4c2cc47e8e4c0bde, producedFiles[0].extension: , producedFiles[0].contentHash: 8490a5ed35a4361d679e6055a386969e

ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 07078a054d3f597b4c2cc47e8e4c0bde, producedFiles[1].extension: .info, producedFiles[1].contentHash: 4bd9140e19d2e44782f1131172e514ba

ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 646d6432767729ea7d288c636183de97, producedFiles[0].extension: , producedFiles[0].contentHash: 5ca760170f85012ce16aa8c22e8d9ea1

ConsistencyChecker - guid: a1945cd7aab67441ba89015f97494624, dependenciesHash.value: fb8cfb407bba82d4daded6031688ba9b, artifactid: 646d6432767729ea7d288c636183de97, producedFiles[1].extension: .info, producedFiles[1].contentHash: 4bd9140e19d2e44782f1131172e514ba

Importer(ScriptedImporter:Assembly-CSharp::RandomImporter) generated inconsistent result for asset(guid:a1945cd7aab67441ba89015f97494624) "Assets/first.rand"

Преобразование произведенных файлов

producedFile находится в двоичном формате. Вы можете использовать инструмент binary2text для изучения содержимого папки Library, чтобы точно узнать, что было создано импортером. Инструмент binary2text находится в папке Data/Tools в вашей установке Unity Editor. На macOS этот инструмент находится в папке Unity.app/Contents/Helpers/.

Затем вы можете открыть преобразованные несогласованные результаты в инструменте diff, чтобы проанализировать, какая часть операции импорта была недетерминированной.

Дополнительные сведения об инструменте binary2text см. в Анализ встроенных активов.

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