Unity에서 에셋 임포트 시간을 단축하기
Source: Dev.to
가져오기 활동 개요
프로젝트에 새 에셋을 추가하면 Unity는 해당 에셋을 가져오기(importer)를 통해 처리해야 합니다. 대부분의 경우 Unity는 원본 파일을 그대로 사용할 수 없으며, Assets 폴더에 있는 에셋을 읽어 Library 폴더에 엔진이 이해할 수 있는 내부 형식으로 저장합니다.
게임을 개발하는 사람이라면, 겉보기에 무관한 작업이 다른 에셋들의 대규모 재‑import를 일으키거나, 새 프로젝트를 여는 데 매우 오래 걸리는 경우를 경험했을 것입니다. 다행히 Unity는 진단 도구를 제공하여 실제로 무슨 일이 일어났는지 파악하고, 재‑import 시간을 줄여 게임 개발에 더 많은 시간을 할애할 수 있게 해줍니다.
Import Activity 창 검사
Import Activity 창에서는 가장 최근에 발생한 가져오기 목록과, 가져오기를 트리거한 원인, 소요 시간 등 진단 정보를 확인할 수 있습니다. Window > Analysis > Import Activity 메뉴를 통해 열 수 있습니다.
- 오른쪽 패널 – 가져오기 시간이 가장 오래 걸린 에셋과 가장 많은 종속성을 가진 에셋을 빠르게 확인합니다. 이러한 에셋을 우선 처리하면 전체 가져오기 시간을 단축하고 반복 주기를 빠르게 할 수 있습니다.
- 왼쪽 패널 – (재)import된 모든 에셋을 나열합니다. 항목을 선택하면 다음과 같은 추가 정보를 볼 수 있습니다.
- 해당 에셋의 종속성 목록.
- 가져오기가 트리거된 이유(예: 최초 import, 라이브러리 아티팩트 누락, 사용자 정의 또는 동적 종속성 변경, Unity 버전 업그레이드, 빌드 타깃 변경 등).
이 창은 Library 폴더에 생성된 아티팩트(들)를 가리키기도 합니다. 하나의 소스 에셋이 여러 파일을 만들 수 있습니다(예: .fbx 모델은 별도의 머티리얼 및 애니메이션 파일을 생성). 이러한 파일들은 Produced Files/Artifacts 패널에 표시됩니다.
Project 뷰에서 에셋을 오른쪽 클릭하고 “View in Import Activity window” 를 선택하면 해당 에셋의 최신 import 이벤트로 바로 이동할 수 있습니다.
참고: 재‑import는 에셋 종속성 변경(정적: 에셋 이름이나 빌드 타깃 변경, 동적: 다른 에셋을 참조하는 경우)으로도 발생할 수 있습니다. Unity 6.4 이후부터 종속성 해결 로직이 크게 개편되어 종속성이 감소하고 import 시간이 빨라졌습니다. 자세한 내용은 여기를 참고하세요.
Search‑Indexing Importer
때때로 Import Activity 창에 “ASIEI03” 과 같은 이유가 표시됩니다. 이는 Unity Search를 지원하기 위해 사용되는 Search Index Entry 가져오기(importer)입니다.
- 일반적으로 매우 빠르게 동작하며 import 시간에 눈에 띄는 영향을 주지 않습니다.
- 필요에 따라 비활성화할 수 있습니다(Unity 6.3 이상): Preferences > Search > Indexing → Index on Editor Startup 토글 끄기.
Editor 로그 검사
에셋이 import될 때마다 Unity는 Editor logs에 진단 정보를 기록합니다. 이는 Import Activity 창에 표시되는 내용과 동일하지만, 순수 텍스트 형태로 확인할 수 있습니다.
예시 로그 항목
[Worker7] Start importing Assets/Textures/hero.png using Guid(ae35ctf46db9fd442b94a73df0ec0f44) Importer(2089858483,0ecaa5967403d0e2aa24f35e1b516d23)
Done ondemand importing asset: 'Assets/Textures/hero.png' (artifact id: '4fead12a87251aa702d2e109bfb6181b')
Done importing asset: 'Assets/Textures/hero.png' (target hash: 'b6a')
bac4492f6da0253684d7b2f48c6e3') in 0.076 seconds
에셋이 변경된 것으로 표시되는 이유 확인
에셋이 외부에서든, 에디터 내부에서든, 혹은 커스텀 에디터 스크립트에 의해 수정되면 dirty 로 표시됩니다. 이는 Unity가 최신 표현을 얻기 위해 해당 에셋을 다시 임포트해야 함을 의미합니다.
Import Activity 창에서는 재임포트의 대략적인 이유를 보여주지만, 때때로 더 자세한 정보가 필요합니다. ObjectSetDirty 진단 플래그를 활성화하면 Unity가 에셋이 dirty 로 표시된 호출 스택을 출력합니다.
활성화 방법
- Preferences > Diagnostics > Core 를 엽니다.
- ObjectSetDirty 를 체크합니다.
- 변경 사항을 적용하려면 에디터를 재시작합니다.
이제 에셋이 dirty 로 표시될 때마다 Editor 로그에 해당 변경을 일으킨 정확한 코드 경로를 가리키는 스택 트레이스가 포함됩니다. 이는 스크립트나 서드파티 도구에 의해 발생하는 예기치 않은 재임포트를 추적하는 데 매우 유용합니다.
더티 카운트 로깅
Dirty Count 플래그가 활성화되면, Unity는 객체의 더티 카운트가 변경될 때마다 로그를 출력합니다. 로그 항목은 다음 순서대로 포함됩니다:
- 더티 카운트 변경 (
Increment또는Clear) - 인스턴스 ID
- 객체 이름
- 객체 타입
예시 – Increment
Increment Dirty(3) : [-3808] Sphere (GameObject)
예시 – Clear (보통 재‑임포트 후)
Clear Dirty(0) : [942] UIMask (Sprite)
팁: All logs에 대해 Stack Trace Logging을 Full로 설정하면, 객체를 더티로 표시한 원인을 보여주는 전체 스택 트레이스를 확인할 수 있습니다.

로그 항목 해석하기
Increment Dirty(1) : [17448] HeroPrefab (GameObject)
#0 PlatformStacktrace::GetStacktrace(int)
#1 DebugStringToFile(DebugStringToFileData const&)
#2 Object::IncrementPersistentDirtyIndex()
#3 Object::SetDirty()
#4 GameObject::SetLayer(int)
#5 (Mono JIT Code) (wrapper managed-to-native) UnityEngine.GameObject:set_layer_Injected (intptr,int)
#6 (Mono JIT Code) UnityEngine.GameObject:set_layer (int)
#7 (Mono JIT Code) [SceneModeUtility.cs:311] UnityEditor.SceneModeUtility:SetLayer (System.ReadOnlySpan`1,string)
…
스택 트레이스를 보면 해당 에셋이 레이어가 변경되어 더티로 표시된 것을 알 수 있습니다.
이 진단 플래그에 대해 자세히 알아보려면 여기를 참고하세요.
AssetDatabase API 작업 배치
많은 에디터 API 호출(예: AssetDatabase.CopyAsset, AssetDatabase.DeleteAsset)은 각 라인 후에 데이터베이스 새로 고침을 트리거합니다. 이는 많은 에셋을 처리할 때 비용이 많이 들 수 있습니다.
배치 편집
AssetDatabase.StartAssetEditing()와 AssetDatabase.StopAssetEditing() 사이에 에셋 수정 코드를 감싸 자동 새로 고침을 일시 중지하고 마지막에 한 번만 새로 고침을 수행합니다.
try
{
AssetDatabase.StartAssetEditing();
AssetDatabase.MoveAsset("Assets/hero.png", "Assets/Textures/hero.png");
AssetDatabase.DeleteAsset("Assets/Old/placeholder.png");
}
finally
{
AssetDatabase.StopAssetEditing();
}
Note: Unity는 이러한 호출에 대해 내부 카운터를 유지합니다. 각
StartAssetEditing에 대응되는StopAssetEditing을 반드시 매치하세요; 그렇지 않으면 AssetDatabase가 비활성화된 상태로 남아 응답하지 않을 수 있습니다.
병렬 가져오기
Unity 2022부터 지원되는 에셋 유형에 대해 병렬 가져오기를 활성화할 수 있어, 가져오기 속도를 크게 향상시킬 수 있습니다.
- Project Settings → Editor → Asset Pipeline을 엽니다.
- Parallel Import 옵션을 체크합니다.

| 자산 유형 | 병렬 가져오기 |
|---|---|
| 텍스처 | ✅ |
| 모델 | ✅ |
| 오디오 | ✅ |
| 기타 | ❌ (순차적으로 가져옴) |
활성화하면 Unity가 작업을 여러 스레드에 분산시킵니다. 동일한 설정 패널에서 작업자 스레드 수와 대기 동작을 지정할 수 있습니다. Unity는 이러한 값을 최대한 반영하려 하지만, 실제 작업자 수는 시스템 리소스에 따라 달라질 수 있습니다.
Source:
에셋 자동 새로 고침 비활성화
기본적으로 Unity는 에디터가 포커스를 다시 얻을 때마다 에셋 데이터베이스를 자동으로 새로 고쳐 변경된 에셋을 다시 가져오고 추가·삭제된 파일을 감지합니다.
자동 새로 고침 끄기
- Preferences → Asset Pipeline을 엽니다.
- Auto Refresh를 Disabled로 설정합니다.

자동 새로 고침을 비활성화하면 에셋 데이터베이스를 수동으로 새로 고쳐야 합니다:
- 메뉴:
Assets → Refresh - API:
AssetDatabase.Refresh()
IDE 통합
많은 IDE(예: Rider)는 자동으로 새로 고침을 트리거할 수 있습니다. 이를 방지하려면:
- Rider:
Languages & Frameworks → Unity Engine → General → Automatically refresh assets in Unity(비활성화).

Source: …
Import 시 텍스처 압축
새 프로젝트를 만들거나 새로운 텍스처 에셋을 추가하면 Unity는 import 과정에서 해당 텍스처를 자동으로 압축합니다. 이는 런타임 시 메모리 사용량과 성능을 최적화하기 위함입니다.
자동 압축 비활성화
- Preferences → Asset Pipeline → Compress Textures on Import 를 엽니다.
- 옵션을 off 로 전환합니다.

- 효과: import 시간이 단축됩니다. 에디터에서 작업하는 동안 Unity는 텍스처를 압축하지 않은 상태로 유지합니다.
- 빌드에 미치는 영향: 텍스처는 빌드를 만들 때만 압축되므로 빌드 과정이 길어질 수 있습니다.
- 중요한 경우: 로컬 빌드를 전혀 만들지 않고(예: CI/CD 파이프라인에만 의존) 경우, 빌드 시간이 길어지는 것이 크게 문제되지 않을 수 있습니다.
에디터를 열기 전에 비활성화
초기 프로젝트 import 속도를 높이려면 사용자 설정 파일을 직접 편집합니다:
UserSettings/EditorUserSettings.asset
다음 속성을 설정합니다:
m_CompressAssetsOnImport: 0
이렇게 하면 첫 번째 import 과정에서 텍스처 압축이 수행되지 않아 에디터 시작 속도가 빨라집니다.



