비동기 셰이더 컴파일
AssetDatabase

씬의 기반 작업

Unity는 에셋을 자동으로 임포트하고, 에셋을 임포트하는 데 사용할 임포트 설정과 프로젝트 전반에서 에셋이 사용되는 위치 같은 에셋에 대한 다양한 추가 데이터를 관리합니다. 아래에는 이 프로세스가 진행되는 방법이 설명되어 있습니다.

Unity에 에셋을 임포트하면 어떻게 됩니까?

1. 고유 ID 할당

에셋 폴더에 텍스처 같은 에셋을 저장하면 Unity가 먼저 새 파일이 추가되었음을 인식합니다(에디터는 에셋 폴더의 콘텐츠를 기존에 알려진 에셋의 리스트와 대조하여 자주 확인합니다.).

Unity는 우선 에셋에 고유 ID를 할당하는 단계부터 수행합니다. 이 ID는 Unity에서 에셋을 참조하는 데 내부적으로 사용됩니다. 즉, 에셋 브레이킹을 참조하지 않고 에셋을 이동하거나 이름을 바꿀 수 있습니다.

2. A .meta 파일 생성

컴퓨터의 Unity 프로젝트에서 Assets 폴더와 Unity 프로젝트 창의 관계
컴퓨터의 Unity 프로젝트에서 Assets 폴더와 Unity 프로젝트 창의 관계

위 그림에는 에셋 폴더 안에서 작성된 각 에셋 및 폴더마다 파일 시스템에 .meta 파일이 나열되어 있는 것이 보입니다. Unity의 프로젝트 창에는 이 파일이 표시되지 않습니다. Unity는 이런 파일을 각 에셋에 대해 작성하지만, 기본적으로 숨겨져 있습니다. 따라서 파일이 Explorer/Finder에도 보이지 않을 수 있습니다. 에디터 창(메인 메뉴: Edit > Project Settings로 이동한 다음 Editor 카테고리를 선택한 후 Version Control 섹션으로 이동)에서 ModeVisible Meta Files로 설정하여 파일을 표시할 수 있습니다.

Unity가 각 에셋에 할당하는 ID는 Unity가 에셋 파일 자체와 함께 만드는 .meta 파일 안에 저장됩니다. 이 .meta 파일은 관련 에셋 파일과 함께 계속 보관되어야 합니다.

중요: .meta 파일은 해당 에셋 파일과 일치하고 계속 함께 보관되어야 합니다. Unity 자체의 프로젝트 창 안에서 에셋을 이동하거나 이름을 바꾸면 Unity가 해당 .meta 파일도 자동으로 이동하거나 이름을 바꿉니다. 에셋을 Unity 외부(예: Windows Explorer 또는 Mac의 Finder)으로 이동하거나 에셋 이름을 바꾸면 .meta 파일도 동일하게 이동하거나 이름을 바꿔야 합니다*.

에셋이 메타 파일을 잃는 경우(예를 들어, 해당 .meta 파일을 이동하거나 이름을 바꾸지 않고 에셋을 Unity 밖으로 이동하거나 이름을 바꾼 경우) 해당 에셋에 대한 모든 레퍼런스가 해제됩니다. Unity는 이동하거나 이름을 바꾼 에셋이 마치 새 에셋인 것처럼 새 .meta 파일을 생성하고 “고아가 된” 이전 .meta 파일을 삭제합니다.

예를 들어, 텍스처 에셋의 .meta 파일을 잃는 경우 해당 텍스처를 사용했던 머티리얼은 이제 이 텍스처를 참조하지 않습니다. 이 문제를 수정하려면 해당 텍스처를 요구했던 머티리얼에 수동으로 다시 할당해야 합니다.

스크립트 에셋의 .meta 파일을 잃는 경우 해당 스크립트가 할당되었던 게임 오브젝트나 프리팹은 “할당되지 않은 스크립트” 컴포넌트와 연결되어 기능을 상실합니다. 이 문제를 수정하려면 스크립트를 해당 오브젝트에 수동으로 다시 할당해야 합니다.

3. 소스 에셋 처리

Unity는 에셋 폴더에 추가하는 파일을 읽고 처리하여 파일 콘텐츠를 데이터의 내부 게임 레디 버전으로 변환합니다. 실제 에셋 파일은 수정되지 않은 상태로 유지되고 처리 및 변환된 데이터 버전은 프로젝트의 Library 폴더에 저장됩니다.

에셋의 내부 포맷을 사용하면 Unity가 에셋의 게임 레디 버전을 에디터에서 런타임 시점에 사용할 수 있게 준비하고, 수정되지 않은 소스 파일을 빨리 편집하고 변경 사항을 에디터에서 자동으로 인식할 수 있도록 에셋 폴더에 보관할 수 있습니다. 예를 들어 포토샵 파일 포맷은 사용하기에 편리하고 에셋 폴더에 직접 저장할 수 있지만, 모바일 디바이스나 PC 그래픽 카드 같은 하드웨어는 해당 포맷을 직접 텍스처로 렌더링할 수 없습니다. Unity가 에셋을 내부적으로 표현하는 데 사용되는 모든 데이터는 Library 폴더에 저장됩니다. 이 폴더는 캐시 폴더와 유사하다고 생각할 수 있습니다. 사용자는 라이브러리 폴더를 수동으로 변경하지 않아도 되며, 변경하려고 하면 Unity 에디터에서 프로젝트의 기능에 영향을 미칠 수 있습니다. 하지만 프로젝트가 열려 있지 않은 라이브러리 폴더를 Unity에서 언제든지 안전하게 삭제할 수 있습니다. 이 폴더의 데이터는 모두 에셋 및 ProjectSettings 폴더에 저장된 데이터로부터 생성되기 때문입니다. 따라서 라이브러리 폴더를 버전 관리에 포함시켜서도 안 됩니다.

때로는 임포트에서 여러 에셋이 생성되기도 함

다음과 같은 상황에는 일부 에셋 파일로 인해 여러 에셋이 생성될 수 있습니다.

  • FBX 같은 3D 파일이 머티리얼을 정의하거나 임베디드 텍스처를 포함하는 경우 이 경우 정의된 머티리얼과 임베디드 텍스처가 Unity에서 별도의 에셋으로 추출되고 표시됩니다.

  • 이미지 파일이 여러 스프라이트로 임포트되는 경우 Unity 스프라이트 에디터를 사용해 단일 그래픽 이미지에서 여러 스프라이트를 정의할 수 있습니다. 이 경우 에디터에서 정의된 각 스프라이트는 프로젝트 창에 개별 스프라이트 에셋으로 표시됩니다.

  • 3D 파일에는 여러 애니메이션 타임라인이 포함되어 있거나, 해당 애니메이션 임포트 설정에 여러 개별 클립이 정의되어 있습니다. 이 경우 여러 애니메이션 클립이 프로젝트 창에 개별 애니메이션 클립으로 표시됩니다.

임포트 설정에 따라 에셋 프로세싱이 변경될 수 있음

메타 파일에는 에셋에 할당된 고유 ID 와 더불어 프로젝트 창에 선택된 에셋이 있는 경우에 인스펙터에서 보이는 모든 임포트 설정의 값이 있습니다. 텍스처의 경우 여기에는 텍스처 타입, 랩 모드, 필터 모드 및 이방성 레벨 같은 설정이 포함됩니다.

에셋에 대한 임포트 설정을 변경하면 변경된 설정이 에셋과 함께 저장된 .meta 파일에 저장됩니다. 에셋은 새 설정에 따라 다시 임포트되고, 이에 대응하여 임포트되어 “이미 게임에 로드된” 데이터가 프로젝트의 라이브러리 폴더에서 업데이트 됩니다.

프로젝트를 백업하거나 버전 관리 저장소에 프로젝트를 추가할 때는 AssetsProjectSettings 폴더가 모두 포함된 메인 Unity 프로젝트 폴더를 포함시켜야 합니다. 이런 폴더에 있는 모든 정보는 Unity의 작동 방식에 매우 중요합니다. 백업 용도로 사용하는 경우 LibraryTemp 폴더를 제외해야 합니다.

참고: Unity 4.2 이전에서 만든 프로젝트에는 명시적으로 활성화되지 않는 경우 .meta 파일이 없을 수 있습니다. 이런 프로젝트의 라이브러리 폴더를 삭제하면 데이터 손실이 발생하고 프로젝트가 영구적으로 손상될 수 있습니다. 생성된 에셋 메타 데이터의 내부 포맷이 모두 라이브러리 폴더에 저장되었기 때문입니다.

비동기 셰이더 컴파일
AssetDatabase