Version: 2021.3
언어: 한국어
스크립트된 임포터
텍스트 에셋

임포터 일관성

작성하는 스크립트화된 임포터를 포함하여 에셋 임포터는 일관된(결정론적인) 결과를 생성해야 합니다. 즉 동일한 입력 및 종속성 집합에서 항상 동일한 출력을 생성해야 합니다.

현재 임포터에 대해 이를 검증하려는 경우 에셋 데이터베이스에서 다음의 두 가지 방법으로 현재 프로젝트에 있는 에셋의 임포트 결과에 대한 일관성을 확인할 수 있습니다.

  • 에디터에서 하나 이상의 에셋을 수동으로 다시 임포트합니다.

  • -consistencyCheck 커맨드 라인 인자를 사용하여 에디터를 엽니다.

수동 재임포트 일관성 검사

에셋을 수동으로 다시 임포트하면 Unity는 새로운 임포트 결과가 이전에 캐싱된 임포트 결과와 일치하는지 검사합니다.

수동 재임포트를 시작하려면 에셋을 마우스 오른쪽 버튼으로 클릭한 후 컨텍스트 메뉴에서 Reimport를 선택하십시오.

그런 다음 Unity는 결과 임포트의 일관성을 검사합니다. 결과에서 비일관성이 감지되면 Unity는 콘솔 창에 경고와 함께 문제를 일으킨 임포터의 세부 정보를 표시합니다. 예를 들면 다음과 같습니다.

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

루트 에셋을 다시 임포트하면 Unity는 해당 자식 에셋도 다시 임포트하여 일관성 검사를 수행합니다.

커맨드 라인 일관성 검사

일관성 검사를 수행하는 두 번째 방법은 -consistencyCheck 커맨드 라인 인자로 Unity를 여는 것입니다. 이렇게 하면 프로젝트의 모든 에셋과 임포터에 대해 일관성 검사를 수행합니다.

커맨드 라인 인자 설명 예시
-consistencyCheck 시작 시 일관성 검사를 수행하도록 에디터에 지시합니다. 기본적으로 “local” 검사를 수행합니다(아래 참조). -consistencyCheck
-consistencyCheckSourceMode string 에셋 임포트를 비교할 때 검사할 일관성 검사기의 소스를 설정합니다. 가능한 값은 ‘local’ 또는 ’cacheserver’입니다.

’local’을 설정하면 모든 에셋을 로컬로 다시 임포트하도록 강제로 지정한 후 이전 임포트와 다른지 검사합니다.

’cacheserver’를 설정하면 에셋에 대한 메타데이터를 캐시 서버에 요청한 후 결과가 캐시 서버에 있는 것과 로컬상에서 일치하는지 검사합니다. 이 경우에는 모든 에셋을 다시 임포트하지 않습니다.
-consistencyCheckSourceMode local
-consistencyCheckSourceMode cacheserver

시작 시 발견된 모든 비일관성은 콘솔뿐만 아니라 에디터 로그 파일에도 기록됩니다.

일관성 검사기는 캐싱 가능한 에셋 임포트만 검사합니다. 따라서 ScriptedImporter에 대한 캐싱을 비활성화하면 해당 임포트에 대한 일관성 검사도 비활성화됩니다. 스크립트화된 임포터의 캐싱을 비활성화하는 방법은 AssetImporters.ScriptedImporterAttribute를 참조하십시오.

캐시 서버를 확인 소스로 사용하려면 Unity 액셀러레이터 문서를 참조하십시오.

에디터 로그

임포터 비일관성이 감지되면 에디터 로그에서 자세한 내용을 확인할 수 있습니다. 여기에는 다음이 포함됩니다.

  • 일관성 검사 실패를 일으킨 에셋

  • 해당 에셋의 GUID

  • 에셋 임포트 결과의 콘텐츠 해시

  • 에셋의 이전 리비전과 비교하는 방법

다음은 임포터 비일관성을 보여주는 에디터 로그의 예제입니다.

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"

캐시 서버를 이용할 수 없는 경우 일관성 검사기는 에디터 로그에 경고를 출력합니다.

캐시 서버가 프로젝트에 대해 설정되지 않으면 다음의 메시지가 출력됩니다.

ConsistencyChecker - Cacheserver is not enabled

Unity가 캐시 서버에 연결할 수 없으면 다음의 메시지가 출력됩니다.

ConsistencyChecker - Not connected to accelerator/cacheserver

디버깅

Unity 에디터 설치의 Data/Tools 폴더에 있는 ‘binary2text’ 툴을 사용하여 라이브러리 폴더의 콘텐츠를 검사하고 임포터가 무엇을 생성했는지 정확히 파악할 수 있습니다.

예제:

./Data/Tools/binary2text ./myProject/Library/Artifacts/84/8490a5ed35a4361d679e6055a386969e output_file

해시 값은 에셋의 콘텐츠 해시입니다. 보고된 비일관성을 찾고 검사가 진행되는 동안 어떤 콘텐츠가 생성되었는지 확인하려면 에디터 로그를 살펴보십시오.

스크립트된 임포터
텍스트 에셋