Unity에서 에셋 임포트 시간을 단축하기

발행: (2025년 12월 31일 오전 03:41 GMT+9)
13 min read
원문: Dev.to

Source: Dev.to

가져오기 활동 개요

프로젝트에 새 에셋을 추가하면 Unity는 해당 에셋을 가져오기(importer)를 통해 처리해야 합니다. 대부분의 경우 Unity는 원본 파일을 그대로 사용할 수 없으며, Assets 폴더에 있는 에셋을 읽어 Library 폴더에 엔진이 이해할 수 있는 내부 형식으로 저장합니다.

게임을 개발하는 사람이라면, 겉보기에 무관한 작업이 다른 에셋들의 대규모 재‑import를 일으키거나, 새 프로젝트를 여는 데 매우 오래 걸리는 경우를 경험했을 것입니다. 다행히 Unity는 진단 도구를 제공하여 실제로 무슨 일이 일어났는지 파악하고, 재‑import 시간을 줄여 게임 개발에 더 많은 시간을 할애할 수 있게 해줍니다.

Import Activity 창 검사

Import Activity 창에서는 가장 최근에 발생한 가져오기 목록과, 가져오기를 트리거한 원인, 소요 시간 등 진단 정보를 확인할 수 있습니다. Window > Analysis > Import Activity 메뉴를 통해 열 수 있습니다.

Import Activity window

  • 오른쪽 패널 – 가져오기 시간이 가장 오래 걸린 에셋과 가장 많은 종속성을 가진 에셋을 빠르게 확인합니다. 이러한 에셋을 우선 처리하면 전체 가져오기 시간을 단축하고 반복 주기를 빠르게 할 수 있습니다.
  • 왼쪽 패널 – (재)import된 모든 에셋을 나열합니다. 항목을 선택하면 다음과 같은 추가 정보를 볼 수 있습니다.
    • 해당 에셋의 종속성 목록.
    • 가져오기가 트리거된 이유(예: 최초 import, 라이브러리 아티팩트 누락, 사용자 정의 또는 동적 종속성 변경, Unity 버전 업그레이드, 빌드 타깃 변경 등).

Import Activity details

이 창은 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 > IndexingIndex on Editor Startup 토글 끄기.

Search Indexing preferences

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 로 표시된 호출 스택을 출력합니다.

활성화 방법

  1. Preferences > Diagnostics > Core 를 엽니다.
  2. ObjectSetDirty 를 체크합니다.
  3. 변경 사항을 적용하려면 에디터를 재시작합니다.

ObjectSetDirty preference

이제 에셋이 dirty 로 표시될 때마다 Editor 로그에 해당 변경을 일으킨 정확한 코드 경로를 가리키는 스택 트레이스가 포함됩니다. 이는 스크립트나 서드파티 도구에 의해 발생하는 예기치 않은 재임포트를 추적하는 데 매우 유용합니다.

더티 카운트 로깅

Dirty Count 플래그가 활성화되면, Unity는 객체의 더티 카운트가 변경될 때마다 로그를 출력합니다. 로그 항목은 다음 순서대로 포함됩니다:

  1. 더티 카운트 변경 (Increment 또는 Clear)
  2. 인스턴스 ID
  3. 객체 이름
  4. 객체 타입

예시 – Increment

Increment Dirty(3) : [-3808] Sphere (GameObject)

예시 – Clear (보통 재‑임포트 후)

Clear Dirty(0) : [942] UIMask (Sprite)

팁: All logs에 대해 Stack Trace LoggingFull로 설정하면, 객체를 더티로 표시한 원인을 보여주는 전체 스택 트레이스를 확인할 수 있습니다.

Stacktrace Logging Level

로그 항목 해석하기

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부터 지원되는 에셋 유형에 대해 병렬 가져오기를 활성화할 수 있어, 가져오기 속도를 크게 향상시킬 수 있습니다.

  1. Project Settings → Editor → Asset Pipeline을 엽니다.
  2. Parallel Import 옵션을 체크합니다.

Parallel Import Setting

자산 유형병렬 가져오기
텍스처
모델
오디오
기타❌ (순차적으로 가져옴)

활성화하면 Unity가 작업을 여러 스레드에 분산시킵니다. 동일한 설정 패널에서 작업자 스레드 수와 대기 동작을 지정할 수 있습니다. Unity는 이러한 값을 최대한 반영하려 하지만, 실제 작업자 수는 시스템 리소스에 따라 달라질 수 있습니다.

Source:

에셋 자동 새로 고침 비활성화

기본적으로 Unity는 에디터가 포커스를 다시 얻을 때마다 에셋 데이터베이스를 자동으로 새로 고쳐 변경된 에셋을 다시 가져오고 추가·삭제된 파일을 감지합니다.

자동 새로 고침 끄기

  1. Preferences → Asset Pipeline을 엽니다.
  2. Auto RefreshDisabled로 설정합니다.

Auto Refresh Disabled

자동 새로 고침을 비활성화하면 에셋 데이터베이스를 수동으로 새로 고쳐야 합니다:

  • 메뉴: Assets → Refresh
  • API: AssetDatabase.Refresh()

IDE 통합

많은 IDE(예: Rider)는 자동으로 새로 고침을 트리거할 수 있습니다. 이를 방지하려면:

  • Rider: Languages & Frameworks → Unity Engine → General → Automatically refresh assets in Unity (비활성화).

Rider Unity Refresh Setting

Source:

Import 시 텍스처 압축

새 프로젝트를 만들거나 새로운 텍스처 에셋을 추가하면 Unity는 import 과정에서 해당 텍스처를 자동으로 압축합니다. 이는 런타임 시 메모리 사용량과 성능을 최적화하기 위함입니다.

자동 압축 비활성화

  1. Preferences → Asset Pipeline → Compress Textures on Import 를 엽니다.
  2. 옵션을 off 로 전환합니다.

Editor texture import settings

  • 효과: import 시간이 단축됩니다. 에디터에서 작업하는 동안 Unity는 텍스처를 압축하지 않은 상태로 유지합니다.
  • 빌드에 미치는 영향: 텍스처는 빌드를 만들 때만 압축되므로 빌드 과정이 길어질 수 있습니다.
  • 중요한 경우: 로컬 빌드를 전혀 만들지 않고(예: CI/CD 파이프라인에만 의존) 경우, 빌드 시간이 길어지는 것이 크게 문제되지 않을 수 있습니다.

에디터를 열기 전에 비활성화

초기 프로젝트 import 속도를 높이려면 사용자 설정 파일을 직접 편집합니다:

UserSettings/EditorUserSettings.asset

다음 속성을 설정합니다:

m_CompressAssetsOnImport: 0

이렇게 하면 첫 번째 import 과정에서 텍스처 압축이 수행되지 않아 에디터 시작 속도가 빨라집니다.

Back to Blog

관련 글

더 보기 »