어드레서블 개요
어드레서블은 프로젝트에 맞게 확장할 수 있는 시스템을 제공합니다. 간단한 설정으로 시작한 다음, 프로젝트의 복잡성이 증가함에 따라 최소한의 코드만 변경하여 재구성할 수 있습니다.
예를 들어, 하나의 어드레서블 에셋 그룹으로 시작하면 Unity가 해당 그룹을 세트로 로드합니다. 그런 다음 콘텐츠를 더 추가할 때 에셋을 여러 그룹으로 분할하여 특정 시점에 필요한 에셋만 로드할 수 있습니다. 팀의 규모가 커지면 별도의 Unity 프로젝트를 만들어 다양한 유형의 에셋을 개발할 수 있습니다. 이러한 보조 프로젝트는 메인 프로젝트에서 로드하는 자체 어드레서블 콘텐츠 빌드를 생성할 수 있습니다.
개념
이 개요에서는 어드레서블 시스템으로 에셋을 관리 및 사용하는 방법을 이해하는 데 도움이 되는 다음 개념을 설명합니다.
개념 | 설명 |
---|---|
어드레서블 툴 | Addressables 패키지에는 콘텐츠를 구성, 빌드 및 최적화하는 데 사용할 수 있는 여러 창과 툴이 있습니다. |
에셋 주소 | 어드레서블 에셋을 식별하는 문자열 ID입니다. 에셋을 로드하는 키로서 주소를 사용할 수 있습니다. |
에셋 로드 및 언로드 | Addressables API는 런타임에 에셋을 로드 및 릴리스하는 자체 기능을 제공합니다. |
Asset location | 에셋 및 그 종속성을 로드하는 방법을 설명하는 런타임 오브젝트입니다. 에셋을 로드하는 키로서 위치 오브젝트를 사용할 수 있습니다. |
AssetReference | 인스펙터 창의 필드에 어드레서블 에셋을 할당하도록 지원하는 데 사용할 수 있는 유형입니다. AssetReference 인스턴스를 키로 사용하여 에셋을 로드할 수 있습니다. AssetReference 클래스 또한 자체 로딩 메서드를 제공합니다. |
콘텐츠 빌드 | 콘텐츠 빌드를 사용하면 플레이어 빌드를 만들기 전에 별도의 단계로 에셋을 수집하고 패키징할 수 있습니다. |
콘텐츠 카탈로그 | 어드레서블은 카탈로그를 사용하여 에셋을 포함하는 리소스에 해당 에셋을 매핑합니다. |
종속성 | 에셋 종속성은 씬 에셋에서 사용되는 프리팹이나 프리팹 에셋에서 사용되는 머티리얼처럼 다른 에셋에 의해 사용되는 에셋을 가리킵니다. |
종속성 및 리소스 관리 | 어드레서블 시스템은 레퍼런스 수를 사용하여 어떤 에셋과 에셋 번들이 사용 중인지를 추적합니다. 여기에는 시스템이 종속성(참조된 기타 에셋)을 로드 또는 언로드하는지 여부가 포함됩니다. |
그룹 | 에셋을 에디터의 그룹에 할당합니다. 그룹 설정은 어드레서블이 그룹 에셋을 에셋 번들로 패키징하는 방법 및 런타임에 로드하는 방법을 설정합니다. |
Key | 하나 이상의 어드레서블을 식별하는 오브젝트입니다. 키에는 주소, 레이블, AssetReference 인스턴스 및 위치 오브젝트가 포함됩니다. |
레이블 | 여러 에셋에 할당하고 관련 에셋을 그룹으로 함께 로드하는 데 사용할 수 있는 태그입니다. 에셋을 로드하는 키로서 레이블을 사용할 수 있습니다. |
Multiple platform support | 빌드 시스템은 플랫폼별로 빌드된 콘텐츠를 분리하고 런타임에 올바른 경로를 결정합니다. |
기본적으로 어드레서블은 에셋을 패키징하기 위해 에셋 번들을 사용합니다. 또한 자체 IResourceProvider
클래스를 구현하여 에셋에 액세스하는 다른 방법을 지원할 수 있습니다.
에셋 주소
어드레서블 시스템의 주요 기능은 에셋에 주소를 할당하고 사용하여 런타임에 로드하는 것입니다. 어드레서블 리소스 관리자는 콘텐츠 카탈로그에서 주소를 검색하여 에셋이 저장된 위치를 찾습니다. 에셋은 애플리케이션에 빌트인되거나 로컬로 캐싱되거나 원격으로 호스팅될 수 있습니다. 리소스 관리자는 에셋과 모든 종속성을 로드하고 필요한 경우 콘텐츠를 먼저 다운로드합니다.
어드레서블은 어디에 있든 관계 없이 주소별로 에셋을 로드합니다.
주소는 에셋의 실제 위치와 연결되지 않으므로, 여러 옵션을 사용하여 Unity 에디터와 런타임 모두에서 에셋을 관리하고 최적화할 수 있습니다. 카탈로그는 주소를 실제 위치에 매핑합니다.
에셋에 고유 주소를 할당하는 것이 가장 좋지만, 에셋 주소가 고유해야 할 필요는 없습니다. 동일한 주소 문자열을 두 개 이상의 에셋에 할당하는 편이 유용하다면 그렇게 해도 됩니다. 예를 들어 에셋의 배리언트가 있으면 동일한 주소를 모든 배리언트에 할당하고 레이블을 사용하여 각 배리언트를 구분할 수 있습니다.
- 에셋 1: 주소:
"plate_armor_rusty"
, 레이블:"hd"
- 에셋 2: 주소:
"plate_armor_rusty"
, 레이블:"sd"
LoadAssetAsync
와 같이 단일 에셋만 로드하는 Addressables
API 메서드는 여러 에셋에 할당된 주소로 호출한 경우 첫 번째로 찾은 인스턴스를 로드합니다. LoadAssetsAsync
와 같은 기타 메서드는 하나의 작업에 여러 에셋을 로드하고 지정된 주소로 모든 에셋을 로드합니다.
[!팁]
LoadAssetsAsync
의MergeMode
파라미터를 사용하여 두 가지 키의 교차점을 로드합니다.이전 예시에서는 주소
"plate_armor_rusty"
와 레이블"hd"
를 키로 지정하고 교차점을 병합 모드로 지정하여 에셋 1을 로드할 수 있습니다. 그런 다음 레이블 값을"sd"
로 변경하여 에셋 2를 로드할 수 있습니다.
주소를 에셋에 할당하는 방법에 대한 자세한 내용은 에셋을 어드레서블로 만들기를 참조하십시오. 주소를 포함하여 키로 에셋을 로드하는 방법에 대한 자세한 내용은 에셋 로드를 참조하십시오.
AssetReference
AssetReference
는 모든 종류의 어드레서블 에셋으로 설정할 수 있는 유형입니다. Unity는 레퍼런스에 할당된 에셋을 자동으로 로드하지 않으므로, 에셋을 로드 및 언로드하는 시점을 사용자가 더 세부적으로 제어할 수 있습니다.
MonoBehaviour
또는 ScriptableObject
에서 AssetReference
유형의 필드를 사용하여 해당 필드에 사용할 어드레서블 에셋을 지정합니다(주소를 지정하는 문자열 사용 대신). AssetReferences
는 드래그 앤 드롭 및 오브젝트 피커 할당을 지원하여 에디터 인스펙터에서 더 간편하게 사용할 수 있도록 합니다.
또한 어드레서블은 더 특수한 유형을 제공합니다(예: AssetReferenceGameObject
및 AssetReferenceTexture
). 이러한 특수 서브 클래스를 사용하여 AssetReference
필드에 잘못된 에셋 유형을 할당할 가능성을 없앨 수 있습니다. 또한 AssetReferenceUILabelRestriction
속성을 사용하여 특정 레이블이 있는 에셋에 대한 할당을 제한할 수 있습니다.
자세한 내용은 AssetReference 사용을 참조하십시오.
에셋 로드 및 언로드
어드레서블 에셋을 로드하려면 주소를 사용하거나 레이블 또는 AssetReference
와 같은 기타 키를 사용할 수 있습니다. 자세한 내용은 어드레서블 에셋 로드를 참조하십시오. 메인 에셋만 로드하면 어드레서블이 종속 에셋을 자동으로 로드합니다.
런타임에 애플리케이션이 어드레서블 에셋에 더 이상 액세스할 필요가 없는 경우, 어드레서블이 관련 메모리를 확보할 수 있도록 해당 에셋을 해제해야 합니다. 어드레서블 시스템은 로드된 에셋의 레퍼런스 수를 유지하며, 레퍼런스 수가 0으로 돌아올 때까지 에셋을 언로드하지 않습니다. 따라서 에셋이나 종속성이 아직 사용 중인지 추적할 필요가 없습니다. 에셋을 명시적으로 로드할 때마다 애플리케이션에 해당 인스턴스가 더 이상 필요하지 않을 때만 해제하도록 하면 됩니다. 자세한 내용은 어드레서블 에셋 해제를 참조하십시오.
종속성 및 리소스 관리
Unity의 에셋은 서로에게 종속될 수 있습니다. 씬은 하나 이상의 프리팹을 참조할 수도 있으며, 또는 프리팹이 하나 이상의 머티리얼을 사용할 수도 있습니다. 하나 이상의 프리팹이 동일한 머티리얼을 사용할 수 있으며 해당 프리팹은 서로 다른 에셋 번들에 존재할 수 있습니다. 어드레서블 에셋을 로드하면 시스템은 참조하는 모든 종속 에셋을 자동으로 찾아 로드합니다. 시스템이 에셋을 언로드하면 다른 에셋이 종속성을 계속 사용하지 않는 한 해당 종속성도 언로드됩니다.
에셋을 로드 및 해제할 때 어드레서블 시스템은 각 항목에 대한 레퍼런스 수를 유지합니다. 에셋이 더 이상 참조되지 않으면 어드레서블은 해당 에셋을 언로드합니다. 에셋이 더 이상 사용 중인 에셋을 포함하지 않는 번들에 있었던 경우, 어드레서블은 해당 번들도 언로드합니다.
자세한 내용은 메모리 관리를 참조하십시오.
어드레서블 그룹 및 레이블
어드레서블 그룹을 사용하면 콘텐츠를 구성할 수 있습니다. 모든 어드레서블 에셋은 그룹에 속합니다. 에셋을 그룹에 명시적으로 할당하지 않는 경우 어드레서블은 에셋을 기본 그룹에 추가합니다.
그룹 설정을 조정하여 어드레서블 빌드 시스템이 그룹에 있는 에셋을 번들로 패키징하는 방법을 지정할 수 있습니다. 예를 들어 그룹의 모든 에셋을 하나의 에셋 번들 파일에 함께 패킹할지 여부를 선택할 수 있습니다.
레이블을 사용하면 함께 처리하려는 콘텐츠에 태그를 지정할 수 있습니다. 예를 들어 red
, hat
, feather
에 대해 지정된 레이블이 있으면, feather를 포함하는 rad hat이 동일한 에셋 번들의 일부인지 여부에 관계 없이 이들 모두를 하나의 작업에 로드할 수 있습니다. 레이블을 사용하여 그룹의 에셋을 번들로 패킹하는 방법을 정할 수도 있습니다.
Addressables Groups 창을 사용하여 에셋을 그룹에 추가하고 여러 그룹에 걸쳐 에셋을 옮길 수 있습니다. Groups 창에서 레이블을 에셋에 할당할 수도 있습니다.
그룹 스키마
그룹에 할당된 스키마는 그룹에서 에셋을 빌드하는 데 사용되는 설정을 정의합니다. 여러 스키마에서 서로 다른 설정 그룹을 정의할 수 있습니다. 예를 들어, 하나의 표준 스키마는 여러 다른 옵션 사이에서 에셋을 에셋 번들로 패킹 및 압축하는 방법에 대한 설정을 정의합니다. 또 다른 표준 스키마는 그룹의 에셋이 Can Change Post Release 및 Cannot Change Post Release 카테고리 중 어디에 속하는지를 정의합니다.
커스텀 빌드 스크립트와 함께 사용할 스키마를 직접 정의할 수 있습니다.
그룹 스키마에 대한 자세한 내용은 스키마를 참조하십시오.
콘텐츠 카탈로그
어드레서블 시스템은 에셋의 주소를 실제 위치에 매핑하는 콘텐츠 카탈로그 파일을 생성합니다. 또한 카탈로그의 해시가 포함된 해시 파일을 만들 수도 있습니다. 어드레서블 에셋을 원격으로 호스팅하는 경우 시스템은 이 해시 파일을 사용하여 콘텐츠 카탈로그가 변경되었으며 다운로드가 필요한지 여부를 결정합니다. 자세한 내용은 콘텐츠 카탈로그를 참조하십시오.
콘텐츠 빌드를 수행할 때 선택한 프로파일에 따라 콘텐츠 카탈로그의 주소가 리소스 로드 경로에 매핑되는 방식이 결정됩니다. 자세한 내용은 프로파일을 참조하십시오.
콘텐츠 원격 호스팅에 대한 자세한 내용은 콘텐츠 원격 배포를 참조하십시오.
콘텐츠 빌드
어드레서블 시스템은 플레이어 빌드에서 어드레서블 콘텐츠 빌드를 분리합니다. 콘텐츠 빌드는 콘텐츠 카탈로그, 카탈로그 해시, 에셋이 포함된 에셋 번들을 생성합니다.
에셋 형식은 플랫폼에 따라 다르므로, 플레이어를 빌드하기 전에 각 플랫폼에 맞는 콘텐츠 빌드를 만들어야 합니다.
자세한 내용은 어드레서블 콘텐츠 빌드를 참조하십시오.
플레이 모드 스크립트
플레이 모드에서 게임이나 애플리케이션을 실행할 경우 플레이 버튼을 누르기 전에 항상 콘텐츠 빌드를 수행하면 불편하고 속도가 느려질 수 있습니다. 하지만 동시에 가능한 한 빌드된 플레이어에 가까운 상태에서 게임을 실행하는 것이 좋습니다. 어드레서블은 어드레서블 시스템이 플레이 모드에서 에셋을 찾고 로드하는 방법을 결정하는 세 가지 옵션을 제공합니다.
- Use the Asset Database: 어드레서블이 Asset Database에서 직접 에셋을 로드합니다. 코드와 에셋을 모두 변경하는 경우 일반적으로 이 옵션에서 반복 작업 속도가 가장 빠르지만 프로덕션 빌드와의 유사성이 가장 낮습니다.
- Use existing build: 어드레서블이 마지막 콘텐츠 빌드에서 콘텐츠를 로드합니다. 이 옵션은 프로덕션 빌드와 가장 유사하며 에셋을 변경하지 않는 경우 빠른 반복 작업이 가능합니다.
자세한 내용은 플레이 모드 스크립트를 참조하십시오.
어드레서블 툴
어드레서블 시스템은 다음과 같은 툴과 창을 제공하여 어드레서블 에셋의 관리를 지원합니다.
- Addressable Groups 창: 에셋과 그룹 설정을 관리하고 빌드를 제작하는 메인 인터페이스입니다.
- Profiles 창: 빌드에서 사용되는 경로의 설정을 지원합니다.
- 호스팅 툴: 에디터에서 실행되는 간단한 에셋 호스팅 서비스를 제공하여 프로젝트의 개발 및 테스트를 지원합니다.
- 빌드 레이아웃 보고서: 콘텐츠 빌드를 통해 생성된 에셋 번들을 설명합니다.