유니티 어드레서블(Addressables) 시스템 스터디 노트 11화에서는, 어드레서블 에셋에 레이블을 할당하여 관리하는 방법을 다룹니다. 어드레서블 에셋에 레이블을 설정하면 유니티 스크립트에서 레이블별로 로드를 컨트롤할 수 있습니다.
유니티 Addressables 학습 코스 링크
레이블 개요
어드레서블 시스템에서 레이블은 하나 이상의 어드레서블 에셋을 런타임에 세트로 쉽게 로드할 수 있도록 분류하는 방법. 주소(Addresses)와 레이블(Lables)은 런타임 엔진이 에셋을 찾고 검색하는 데 사용하는 개념인 로케이터 키(Locator Key).
어드레서블 그룹이 Build Script 에서 콘텐츠 빌드하는 방법에 필요하다면, 어드레서블 레이블은 로딩 전략을 지원하는 것.
에셋을 로드하는 스크립트를 작성할 때 주소별로 개별 어드레서블 에셋을 로드하는 대신 레이블별로 모든 에셋을 로드하도록 요청할 수 있음. 어드레서블 시스템은 쿼리된 키와 일치하는 모든 에셋을 검색하며, 어느 그룹에서 빌드되었는지 또는 로컬인지 원격인지에 관계없이 모든 에셋을 검색.
레이블 할당
Addressables Groups 창에서 다음 메뉴를 클릭. "Tools > Window > Labels" Addressables Labels 창이 팝업. 여기에 3개의 레이블을 추가. [Fancy, Seasonal, Hats]
Addressables Groups 창의 우측 Labels 탭 하위 드롭다운 박스를 열고 아래 이미지와 같이 Labels 를 설정.
Addressables Groups 창에서 다음 메뉴를 클릭해서 컨텐츠 빌드. "Build > New Build > Default Build Script"
Play Mode Script 는 Use Asset Database 로 설정.
레이블(Labels)로 에셋 로드하기
레이블별로 에셋을 로드하여 공룡에게 무작위 모자를 씌우도록 게임을 다시 작성해본다. 모든 모자를 공통 Hats 레이블로 식별할 수 있으므로 코드가 간단해질 수 있음.
// 기존 코드
int randomIndex = Random.Range(0, 6);
string hatAddress = string.Format("Hat{0:00}", randomIndex);
m_HatLoadOpHandle = Addressables.LoadAssetAsync<GameObject>(hatAddress);
// Label 을 사용할 때는 아래와 같이 m_Keys 를 전달하고 Addressables.MergeMode.Intersection 사용.
private List<string> m_Keys = new List<string>() {"Hats", "Seasonal"};
m_HatsLoadOpHandle = Addressables.LoadAssetsAsync<GameObject>(m_Keys, null, Addressables.MergeMode.Intersection);
레이블을 병합(Merge)해서 새로운 에셋 세트 만들기
Address, Label 을 지정할 때 Merge Mode 를 지정하여 각 키와 일치하는 자산 세트가 결합되는 방식을 결정할 수 있음.
Merge Mode
Union : 모든 키와 (하나라도)일치하는 에셋 포함 (Any Key)
Intersection : 모든 키와 (완벽하게)일치하는 에셋 포함 (Every Key)
UseFirst : 유효한 결과의 첫 번째 키의 에셋만 포함
아래처럼 enum 타입을 지정할 수 있고, Intersection 의 경우, m_Keys 의 요소 모두와 일치하는 에셋만 로드.
Addressables.LoadAssetsAsync<GameObject>(m_Keys, null, Addressables.MergeMode.Intersection);
위 Addressables 이미지상에서 Hat00, 04, 05 만 로드됨.
Labels and Bundle Mode
Content Packing & Loading group 스키마에 Bundle Mode라는 고급 옵션이 있고 Bundle Mode에는 Pack Together By Label 옵션이 있음.
Pack Together By Label 옵션은 레이블을 사용하여 빌드 중에 에셋이 에셋 번들로 분할되는 방식을 알려줌. 예를 들어 Fancy로 레이블이 지정된 Hat01과 Hat02는 Fancy 및 Seasonal로 레이블이 지정된 Hat00과 함께 로드할 수 있음. 예를 들어 원하는 것이 팬시 모자뿐인 경우 큰 번들로 로드하는 것을 방지.
빌드 중에 레이블의 고유한 조합을 가진 에셋을 한데 모아 번들로 묶음. 예를 들어 Hat00은 고유한 AssetBundle에, Hat01과 Hat02는 고유한 번들에, Hat04와 Hat05는 고유한 번들에 포함되도록 만들 수 있음. 이렇게 하면 로드 및 언로드되는 항목이 대부분 함께 뭉쳐 있는 반면 메모리는 재사용 가능한 작은 덩어리로 구성되는 단점은 발생.
Addressables Group 창에서 Hat 그룹을 선택. Inspector 에서 Content Packing & Loading 스키마 아래에 Advanced Options 을 펼치고 Bundle Mode 를 Pack Together By Label 로 설정.
이제 컨텐츠를 빌드해보면 아래와 같이 에셋번들 파일이 여러 개 생성된 것을 확인할 수 있음.
다음 튜토리얼에서는 에디터의 로컬 호스팅 서비스에서 주소 지정이 가능한 에셋을 제공하는 방법을 알아본다.
유니티 Addressables 학습 코스 링크
Unity 2021 버전, 유니티 교과서
https://link.coupang.com/a/ZgsN8
Unity Asset Store
https://prf.hn/click/camref:1011lvz7h/pubref:store/destination:https%3A%2F%2Fassetstore.unity.com%2F
(본문 링크로 유니티 교과서/에셋 구입 시, 일정액의 수수료를 제공받습니다. 감사합니다.)
'유니티 엔진 (Unity Engine)' 카테고리의 다른 글
Unity Network Library "Mirror & Mirage" 자료 스크랩 (0) | 2023.06.09 |
---|---|
Unity FPS Microgame 튜토리얼 둘러보기 (0) | 2023.06.07 |
어드레서블 시작하기(Get started with Addressables) 스터디 노트 12화 "호스팅과 캐싱" (완) (0) | 2023.06.05 |
어드레서블 시작하기(Get started with Addressables) 스터디 노트 10화 "에셋 그룹 템플릿" (0) | 2023.06.02 |
어드레서블 시작하기(Get started with Addressables) 스터디 노트 9화 "그룹 스키마" (1) | 2023.05.31 |
어드레서블 시작하기(Get started with Addressables) 스터디 노트 8화 "프로파일" (0) | 2023.05.31 |
어드레서블 시작하기(Get started with Addressables) 스터디 노트 7화 "프로파일" (0) | 2023.05.29 |