유니티에서 텍스처, 애니메이션, 재질, 프리팹 등을 에셋이라 부르고 Assets 폴더에서 이런 에셋들을 관리하게 된다.


에셋은 기본적으로 씬 혹은 다른 에셋으로부터 '참조' 에 의해 사용된다. 다음 그림을 보자.



이미지 하나를 씬에 배치하고 나무 텍스처를 입혔다. 즉 현재 씬에 있는 이미지 객체가 나무 텍스처 에셋을 '참조' 하게 된 것이다.


참조는 유니티에서 매우 중요한데 다음 두 가지 특징을 살펴보자.

  1. 참조는 내부적으로 에셋에 할당된 고유 ID 로 판별한다. 따라서 에셋의 경로는 무의미하다. 실제로 에셋의 경로를 옮기더라도 참조는 여전히 유지되는 것을 확인할 수 있다
  2. 특수한 경우를 제외하고 씬 혹은 다른 에셋에 의해 참조되지 않은 에셋은 빌드에 포함되지 않는다

유니티는 Assets 내부에 새로운 에셋 파일이 추가되면 이와 1:1 대응하는 meta 파일을 같은 경로에 만들고 여기에 에셋의 고유 ID 를 기록한다. 이 고유 ID 는 경로와는 무관하며 한번 정해지면 바뀌지 않는다. 이제 다른 씬 혹은 에셋에 의해 참조될 때 이 고유 ID 를 가리키게 함으로써 종속성을 만든다.


유니티에서는 빌드시에 Assets 폴더를 통째로 빌드에 포함시키지 않고 참조에 의해 실제 사용되는 에셋들만을 포함시킨다. 예를 들어 A, B, C 씬을 빌드한다고 해보자. 그럼 A, B, C 씬에서 참조하는 에셋들, 그리고 다시 그 에셋들이 참조하는 다른 에셋들, 이런 식으로 모든 참조를 찾아서 해당 에셋들만을 빌드에 포함하게 된다.


단, 위에서도 언급했듯 특수한 경우에는 참조가 없더라도 포함시키는데 Resources 라는 이름의 폴더 하위에 있는 에셋들이 그 대상이다. 스크립트로 동적으로 로드되는 에셋들은 실행 중에 참조가 되기 때문에 빌드시에는 참조가 없다. 따라서 이런 에셋들은 Resources 하위에 두고 다음과 같은 코드를 이용하여 동적 로드한다.


Resources.Load("경로");


Resources 폴더 외에 다른 특수한 폴더들도 존재하므로 유니티 공식 문서를 확인토록 하자.

Posted by 카코데몬
,