에셋 종속 관계 개요
프로젝트 Build Settings에 씬을 포함하고 플레이어를 빌드하면 Unity는 해당 씬과 씬에 사용된 모든 에셋을 애플리케이션의 빌트인 데이터에 포함합니다. 마찬가지로 Unity는 프로젝트의 Resources 폴더에 있는 모든 에셋을 별도의 빌트인 에셋 컬렉션에 포함합니다. 씬의 에셋은 씬의 일부로만 로드되는 반면, Resources의 에셋은 독립적으로 로드할 수 있다는 차이점이 있습니다.
어드레서블 에셋은 로컬 에셋의 추가 세트로 애플리케이션에 빌드하거나, 서버에서 호스팅되는 원격 에셋으로 빌드 외부에 보관했다가 필요할 때 다운로드할 수 있습니다. 원격 에셋에는 코드를 포함할 수 없지만, 원격 에셋은 애플리케이션 자체와 독립적으로 업데이트할 수 있으므로 에셋과 직렬화된 데이터만 변경할 수 있습니다.
프로젝트 에셋이 플레이어 빌드로 익스포트되는 방식
씬과 Resources 폴더 모두에서 동일한 에셋을 사용하는 경우, Unity는 단일 인스턴스를 공유하는 대신 빌드할 때 에셋의 복사본을 만듭니다. 예를 들어 머티리얼을 빌트인 씬에서 사용하고 Resources 폴더에 있는 프리팹에서도 사용하는 경우, 머티리얼 에셋 자체가 Resources 폴더에 없더라도 빌드에 해당 머티리얼의 사본 두 개가 생성됩니다. 그런 다음 동일한 머티리얼을 어드레서블로 표시하면 세 개의 사본이 생성됩니다. 프로젝트의 StreamingAssets 폴더에 있는 파일은 해당 폴더 외부의 에셋에서 참조할 수 없습니다.
[!참고] 플레이어를 빌드하기 전에 어드레서블 에셋의 콘텐츠 빌드를 만들어야 합니다. 플레이어 빌드 중에 Unity는 로컬 어드레서블을 StreamingAssets 폴더에 복사하여 StreamingAssets에 배치한 에셋과 함께 빌드에 포함되도록 합니다. Unity는 빌드 프로세스가 끝날 때 이러한 에셋을 제거합니다. 콘텐츠 빌드를 통해 생성된 원격 어드레서블 파일을 호스팅 서비스에 업로드해야 합니다. 자세한 내용은 빌드를 참조하십시오.
프로젝트에서 어드레서블을 사용할 때는 Resources 폴더에 있는 씬과 데이터를 어드레서블 그룹으로 옮겨 어드레서블로 관리하는 것이 좋습니다.
Build Settings 씬 목록에는 씬이 하나 이상 포함되어야 합니다. 애플리케이션을 초기화하는 최소한의 씬을 만들 수 있습니다.
일반적으로 Resources 폴더에 있는 적은 데이터는 성능 문제를 일으키지 않습니다. 에셋을 배치하는 타사 패키지를 사용하는 경우 문제를 일으키지 않는 한 에셋을 옮길 필요가 없습니다. 어드레서블 에셋은 Resources 폴더에 저장할 수 없습니다.
하위 오브젝트 레퍼런스
Unity는 에셋과 스크립트가 서로를 참조하는 방식에 따라 콘텐츠 빌드에 포함할 항목을 부분적으로 결정합니다. 하위 오브젝트 레퍼런스는 프로세스를 더욱 복잡하게 만듭니다.
AssetReference
가 어드레서블 에셋의 하위 오브젝트를 가리키는 경우 Unity는 빌드 시점에 전체 오브젝트를 AssetBundle
로 빌드합니다. AssetReference
가 하위 오브젝트를 직접 참조하는 GameObject
, ScriptableObject
또는 Scene
과 같은 어드레서블 오브젝트를 가리키는 경우, Unity는 AssetBundle
에 하위 오브젝트를 암시적 종속성으로만 빌드합니다.
에셋 및 에셋 번들 종속 관계
어드레서블 그룹에 에셋을 추가할 경우, 콘텐츠 빌드를 만들 때 에셋이 에셋 번들에 패킹됩니다. 이 경우 에셋은 번들에 명시적으로 포함되며, 이를 명시적 에셋이라고 합니다.
에셋이 다른 에셋을 참조할 경우, 참조된 에셋은 원래 에셋과 종속 관계가 됩니다. 이를 에셋 종속성이라고 합니다. 예를 들어 에셋이 에셋 번들 A에 패킹되고 참조된 에셋이 에셋 번들 B에 패킹되는 경우, 번들 B는 번들 A에 종속됩니다. 이를 에셋 번들 종속성이라고 합니다. 자세한 내용은 에셋 번들 종속 관계 매뉴얼 페이지를 참조하십시오.
에셋 종속 관계는 어드레서블인지 여부에 따라 처리됩니다. 어드레서블인 종속 관계는 해당 종속 관계가 속한 그룹의 설정에 따라 에셋 번들에 패킹됩니다. 이는 참조 에셋과 동일한 번들일 수도 있고 다른 번들일 수도 있습니다. 어드레서블이 아닌 종속성은 참조 에셋의 번들에 포함됩니다. 참조된 에셋은 번들에 암시적으로 포함되며, 이를 암시적 에셋이라고 합니다.
[!팁] 빌드 레이아웃 보고서 툴을 사용하여 콘텐츠 빌드를 통해 생성되는 에셋 번들에 관해 더 자세한 정보를 확인하십시오.
여러 암시적 에셋 참조
둘 이상의 어드레서블이 동일한 암시적 에셋을 참조하는 경우, 참조하는 어드레서블이 포함된 각 번들에 암시적 에셋의 사본이 포함됩니다.
비 어드레서블 에셋은 참조 어드레서블이 있는 각 번들에 복사됩니다.
암시적 에셋이 둘 이상의 번들에 포함되어 있으면, 게임 로직이 예상하는 단일 인스턴스 대신 해당 에셋의 여러 인스턴스가 런타임에 인스턴스화될 수 있습니다. 런타임에 인스턴스 상태를 변경할 경우 다른 모든 에셋이 공통 인스턴스를 공유하는 대신 개별 인스턴스를 갖게 되므로, 동일한 번들의 오브젝트만 변경 사항을 감지할 수 있습니다.
이러한 중복을 방지하려면 암시적 에셋을 어드레서블 에셋으로 만들어 기존 번들 중 하나에 포함하거나 다른 번들에 추가할 수 있습니다. 에셋이 추가된 번들은 해당 에셋을 참조하는 어드레서블 중 하나를 로드할 때마다 로드됩니다. 어드레서블이 참조된 에셋과 다른 에셋 번들에 패킹된 경우, 참조된 에셋이 포함된 번들은 에셋 번들 종속성이 됩니다.
종속 번들은 레퍼런스가 포함된 에셋뿐만 아니라 현재 번들의 모든 에셋을 로드할 때 로드되어야 합니다. 이 다른 에셋 번들에 있는 에셋은 로드되지 않지만, 번들을 로드하는 데 자체 런타임 비용이 듭니다. 자세한 내용은 에셋 번들의 종속 관계 로드에 따른 메모리 영향을 참조하십시오.