어드레서블을 사용하도록 프로젝트 설정
Addressables 패키지를 설치하여 기존 Unity 프로젝트에 어드레서블을 추가할 수 있습니다. 패키지를 설치하고 나면 에셋에 주소를 할당하고 런타임 로딩 코드를 리팩터링해야 합니다.
프로젝트 개발의 어느 단계에서나 어드레서블을 통합할 수 있지만, 개발 후반에 불필요한 코드 리팩터링 및 콘텐츠 계획 변경을 방지하려면 새 프로젝트에서 즉시 어드레서블을 사용하는 것이 가장 좋습니다.
어드레서블로 전환
어드레서블을 사용하여 빌드된 콘텐츠는 해당 어드레서블 빌드에서 빌드된 기타 에셋만 참조합니다. 두 어드레서블에 모두 포함되는 항목에 사용되거나 참조되는 콘텐츠와 Scene data 및 Resource folders 를 통한 플레이어 빌드는 둘 다 로드된 경우 디스크와 메모리에 복제됩니다. 이러한 제한으로 인해 모든 Scene data 및 Resource folders 를 어드레서블 빌드 시스템으로 전환해야 합니다. 이렇게 하면 중복으로 인한 메모리 오버헤드가 줄어들고 어드레서블로 모든 콘텐츠를 관리할 수 있습니다. 또한 콘텐츠가 로컬 또는 원격이 될 수 있으며, 콘텐츠 업데이트 빌드를 통해 업데이트할 수 있습니다.
프로젝트를 어드레서블로 전환하려면 현재 프로젝트가 에셋을 참조 및 로드하는 방식에 따라 서로 다른 단계를 수행해야 합니다.
- Scene data: 씬 또는 씬의 컴포넌트에 직접 추가하는 에셋으로, 애플리케이션이 자동으로 로드합니다. Unity는 씬이 직접 참조하는 에셋과 직렬화된 씬 데이터를 하나의 아카이브에 패키지화하여 빌드된 플레이어 애플리케이션에 포함합니다. 씬 데이터를 어드레서블로 업그레이드하는 방법에 대한 자세한 내용은 씬 데이터 전환을 참조하십시오.
- Prefabs: 게임 오브젝트와 컴포넌트를 사용하여 만들고 씬 외부에 저장하는 에셋입니다. 프리팹 데이터를 어드레서블로 업그레이드하는 방법에 대한 자세한 내용은 프리팹 전환을 참조하십시오.
- Resources folders: 프로젝트의 Resources 폴더에 배치하고
Resources
API를 사용하여 로드하는 에셋입니다. Unity는 Resources 파일의 에셋을 하나의 아카이브에 패키지화하여 빌드된 플레이어 애플리케이션에 포함합니다. Resources 아카이브는 씬 데이터 아카이브와 별개입니다. Resources 폴더를 어드레서블로 업그레이드하는 방법에 대한 자세한 내용은 Resources 폴더로 전환을 참조하십시오. - AssetBundles: 에셋 번들로 패키지화하고
AssetBundle
API를 사용하여 로드하는 에셋입니다. 에셋 번들을 어드레서블로 업그레이드하는 방법에 대한 자세한 내용은 에셋 번들 전환을 참조하십시오. - StreamingAssets:
StreamingAssets
폴더에 배치하는 파일입니다. Unity는StreamingAssets
폴더의 모든 파일을 빌드된 플레이어 애플리케이션에 그대로 포함합니다. 자세한 내용은 StreamingAssets의 파일을 참조하십시오.
씬 데이터 전환
씬 데이터를 어드레서블로 전환하려면 빌드 설정 목록에서 씬을 옮기고 해당 씬을 어드레서블로 만듭니다. 목록에 하나의 씬이 있어야 하며, 이 씬은 Unity가 애플리케이션 설정 시 로드하는 씬입니다. 이를 위해 첫 어드레서블 씬을 로드하기만 하는 새 씬을 만들 수 있습니다.
씬을 전환하려면 다음 단계를 따르십시오.
- 새 초기화 씬을 만듭니다.
- Build Settings 창(메뉴: File > Build Settings)을 엽니다.
- 씬 목록에 초기화 씬을 추가합니다.
- 목록에서 다른 씬을 제거합니다.
- 프로젝트 목록에서 각 씬을 선택하고 인스펙터 창에서 Addressable 옵션을 활성화합니다. 또는 씬 에셋을 Addressables Groups 창의 그룹에 드래그할 수도 있습니다. 새로운 초기화 씬을 어드레서블로 만들지 마십시오.
- 씬을 로드하는 데 사용하는 코드를 업데이트하여
SceneManager
메서드 대신Addressables
클래스 씬 로딩 메서드를 사용합니다.
이제 하나의 큰 어드레서블 씬 그룹을 여러 그룹으로 분할할 수 있습니다. 가장 좋은 방법은 프로젝트 목표에 따라 다릅니다. 계속 진행하려면 씬을 자체 그룹으로 옮겨 각 씬을 독립적으로 로드 및 언로드할 수 있습니다. 에셋 자체를 어드레서블로 만들면 두 개의 다른 번들에서 참조하는 에셋이 중복되지 않게 할 수 있습니다. 대부분의 경우 에셋 번들 간의 종속성을 줄이려면 공유 에셋을 자체 그룹으로 옮기는 것이 더 좋습니다.
이제 하나의 큰 어드레서블 씬 그룹을 여러 그룹으로 분할할 수 있습니다. 가장 좋은 방법은 프로젝트 목표에 따라 다릅니다. 계속 진행하려면 씬을 자체 그룹으로 옮겨 각 씬을 독립적으로 로드 및 언로드할 수 있습니다.
두 개의 다른 번들에서 참조하는 에셋이 중복되지 않게 하려면 에셋을 어드레서블로 만드십시오. 대부분의 경우 에셋 번들 간의 종속성을 줄이려면 공유 에셋을 자체 그룹으로 옮기는 것이 더 좋습니다.
비 어드레서블 씬에서 어드레서블 에셋 사용
어드레서블로 만들고 싶지 않은 씬의 경우, AssetReference를 통해 씬 데이터의 일부로 어드레서블 에셋을 사용할 수 있습니다.
커스텀 MonoBehaviour 또는 ScriptableObject 클래스에 AssetReference 필드를 추가하는 경우, 에셋을 직접 레퍼런스로 할당하는 것과 비슷한 방법으로 Unity 에디터에서 필드에 어드레서블 에셋을 할당할 수 있습니다. 가장 큰 차이점은 AssetReference 필드에 할당된 에셋을 로드 및 해제하기 위해 클래스에 코드를 추가해야 한다는 점입니다. 반면 Unity는 씬에서 오브젝트를 인스턴스화할 때 직접 레퍼런스를 자동으로 로드합니다.
[!참고] 비 어드레서블 씬에서는 UnityEngine 컴포넌트의 필드에 어드레서블 에셋을 사용할 수 없습니다. 예를 들어 비 어드레서블 씬에서 MeshFilter 컴포넌트에 어드레서블 메시 에셋을 할당하는 경우, Unity는 해당 씬에 메시 데이터의 어드레서블 버전을 사용하지 않습니다. 대신 Unity는 메시 에셋을 복사하고 애플리케이션에 두 가지 버전의 메시를 포함시킵니다. 하나는 메시가 포함된 어드레서블 그룹용으로 빌드된 에셋 번들에, 다른 하나는 비 어드레서블 씬의 빌트인 씬 데이터에 포함됩니다. 어드레서블 씬에서 사용할 경우 Unity는 메시 데이터를 복사하지 않고 항상 에셋 번들에서 로드합니다.
커스텀 클래스에서 직접 레퍼런스를 AssetReference로 대체하려면 다음 단계를 따르십시오.
- 오브젝트에 대한 직접 레퍼런스를 에셋 레퍼런스로 대체합니다(예
public GameObject directRefMember;
를public AssetReference assetRefMember;
로 대체). - 직접 레퍼런스와 마찬가지로 에셋을 해당 컴포넌트의 인스펙터에 드래그합니다.
Addressables
API를 사용해서 런타임 코드를 추가하여 할당된 에셋을 로드합니다.- 코드를 추가하여 더 이상 필요하지 않은 로드된 에셋을 해제합니다.
AssetReference 필드 사용에 대한 자세한 내용은 에셋 레퍼런스를 참조하십시오.
어드레서블 에셋 로드에 대한 자세한 내용은 어드레서블 에셋 로드를 참조하십시오.
프리팹 전환
프리팹을 어드레서블 에셋으로 전환하려면 인스펙터 창에서 Addressables 옵션을 활성화하거나 Addressables Groups 창의 그룹에 프리팹을 드래그합니다.
어드레서블 씬에서 사용되는 경우 프리팹을 어드레서블로 만들지 않아도 됩니다. 어드레서블은 씬 계층 구조에 추가하는 프리팹을 씬의 에셋 번들에 포함된 데이터의 일부로 자동으로 포함합니다. 둘 이상의 씬에서 프리팹을 사용하는 경우, 프리팹을 어드레서블 에셋으로 만들어 프리팹 데이터가 프리팹을 사용하는 각 씬에서 중복되지 않게 하십시오. 또한 런타임에 동적으로 로드 및 인스턴스화하려면 프리팹을 어드레서블로 만들어야 합니다.
[!참고] 비 어드레서블 씬에서 프리팹을 사용할 경우, Unity는 프리팹이 어드레서블인지 여부에 관계 없이 프리팹 데이터를 빌트인 씬 데이터로 복사합니다. [분석 툴]의 Check Scene to Addressable Duplicate Dependencies 규칙을 사용하여 어드레서블 에셋 그룹과 비 어드레서블 씬 데이터 간에 중복된 에셋을 식별할 수 있습니다.
Resources 폴더 전환
프로젝트에서 Resources 폴더의 에셋을 로드하는 경우 이러한 에셋을 어드레서블 시스템으로 마이그레이션할 수 있습니다.
- 에셋을 어드레서블로 만듭니다. 이렇게 하려면 각 에셋의 인스펙터 창에서 Addressable 옵션을 활성화하거나 에셋을 Addressables Groups 창의 그룹으로 드래그합니다.
Resources
API를 사용하여 에셋을 로드하는 런타임 코드를 변경해서Addressables
API로 로드합니다.- 코드를 추가하여 더 이상 필요하지 않은 로드된 에셋을 해제합니다.
씬과 마찬가지로 이전의 모든 리소스 에셋을 하나의 그룹에 보관하면 로딩 및 메모리 성능이 동일하게 유지됩니다.
Resources 폴더의 에셋을 어드레서블로 표시하면 시스템에서 해당 에셋을 프로젝트의 새 폴더인 Resources_moved
로 자동으로 옮깁니다. 이동한 에셋의 기본 주소는 폴더 이름이 생략된 이전 경로입니다. 예를 들어 변경되기 전의 로딩 코드는 다음과 같을 수 있습니다.
Resources.LoadAsync\<GameObject\>("desert/tank.prefab");
변경된 로딩 코드는 다음과 같을 수 있습니다.
Addressables.LoadAssetAsync\<GameObject\>("desert/tank.prefab");.
어드레서블 시스템을 사용하도록 프로젝트를 수정한 후 Resources
클래스의 일부 기능을 다르게 구현해야 할 수 있습니다.
예를 들어 Resources.LoadAll
메서드를 고려해 보십시오. 이전에 Resources/MyPrefabs/
라는 폴더에 에셋을 저장하고 Resources.LoadAll\<SampleType\>("MyPrefabs");
를 실행했다면, SampleType
유형과 일치하는 Resources/MyPrefabs/
의 에셋이 모두 로드되었을 것입니다. 어드레서블 시스템은 이러한 기능을 지원하지 않지만, 어드레서블 레이블을 사용하여 비슷한 결과를 얻을 수 있습니다.
에셋 번들 전환
Addressables Groups 창을 처음 열면 모든 에셋 번들을 어드레서블 그룹으로 전환할 수 있습니다. 이러한 작업은 에셋 번들 설정을 어드레서블 시스템으로 마이그레이션하는 가장 쉬운 방법입니다. 그래도 여전히 런타임 코드를 업데이트하여 Addressables
API를 사용해서 에셋을 로드 및 해제해야 합니다.
수동으로 에셋 번들 설정을 전환하려면 Ignore 버튼을 클릭하십시오. 에셋 번들을 어드레서블로 수동 마이그레이션하는 프로세스는 씬 및 Resources 폴더에 대해 설명한 내용과 비슷합니다.
- 각 에셋의 인스펙터 창에서 Addressable 옵션을 활성화하거나 에셋을 Addressables Groups 창의 그룹에 드래그하여 에셋을 어드레서블로 만듭니다. 어드레서블 시스템은 기존의 에셋 번들과 에셋의 레이블 설정을 무시합니다.
AssetBundle
또는UnityWebRequestAssetBundle
API를 사용하여 에셋을 로드하는 런타임 코드를 변경해서Addressables
API로 로드합니다. 어드레서블 시스템이 자동으로 처리하므로, 에셋 번들 오브젝트 자체나 에셋의 종속성을 명시적으로 로드하지 않아도 됩니다.- 코드를 추가하여 더 이상 필요하지 않은 로드된 에셋을 해제합니다.
[!참고] 에셋의 주소에 대한 기본 경로는 해당 파일 경로입니다. 경로를 에셋의 주소로 사용하는 경우 번들에서 로드할 때와 동일한 방식으로 에셋을 로드합니다. 어드레서블 에셋 시스템은 번들과 모든 종속성의 로딩을 처리합니다.
자동 전환 옵션을 선택했거나 에셋을 동등한 어드레서블 그룹에 수동으로 추가한 경우, 그룹 설정에 따라 동일한 에셋이 포함된 동일한 번들 세트가 생성됩니다. 번들 파일 자체는 같지 않습니다.
StreamingAssets의 파일
어드레서블 시스템을 사용할 경우 StreamingAssets
폴더에서 계속해서 파일을 로드할 수 있습니다. 하지만 이 폴더의 파일은 어드레서블일 수 없으며 프로젝트의 다른 에셋을 참조할 수도 없습니다.
어드레서블 시스템은 빌드 도중 런타임 설정 파일과 로컬 에셋 번들을 StreamingAssets 폴더에 배치합니다. 어드레서블은 빌드 프로세스가 끝나면 이러한 파일을 제거하므로 에디터에서 해당 파일을 찾을 수 없습니다.