Unity

리소스 관리 - Addressable (5) - Label 및 다중로딩

Dean83 2024. 2. 2. 13:52

이전 페이지 : https://dean83.tistory.com/207

 

리소스 관리 - Addressable (4) - Scene

이전 페이지 : https://dean83.tistory.com/206 리소스 관리 - Addressable (3) - Sprite 이전 페이지 : https://dean83.tistory.com/205 리소스 관리 - Addressable (2) 이전 페이지 : https://dean83.tistory.com/204 이번에는 inspector 에

dean83.tistory.com

 

Addressable 리소스 들은 Unity 상단메뉴 -> Window -> Asset Management -> Addressables -> Group 을 선택하면, 

리스트업 되어 있다. 

 

해당 리소스 들을 라벨로 분류해 놓으면, 해당 라벨에 속한 리소스들을 한번에 로딩해 올 수 있다. 

또한, 라벨링을 잘 해두어야 리소스 로딩시 메모리 사용 낭비를 줄일 수 있다.

 

1. 라벨 추가 및 배정

  • 위에 언급한 Addressables Group 창 -> 각 리소스별 Labels 컬럼 드롭다운 -> Manage Labels 클릭
  • 라벨 추가
  • 각 리소스에 원하는 라벨 배정
  • 라벨은 하나의 리소스에 여러개를 다중으로 배정할 수 있다. (예 : 리소스A 에 라벨1, 라벨2, 라벨3 ...)

 

2. 라벨을 이용한 리소스 동시 로딩

  • LoadAssetsAsync 함수 호출시 인자값으로 불러올 라벨 리소스를 설정할 수 있다
    • Union : 해당 라벨들이 하나라도 있는 리소스 불러오기
    • Intersection : 해당 라벨들을 모두만족하는 리소스만 불러오기
    • UseFirst : 첫번째 라벨과 매칭되는 리소스만 불러오기
...
private List<string> labels = new List<string>(){"lb1","lb2","lb3",...};  //위에서 설정한 라벨명

private AsyncOperationHandle<IList<GameObjevct>> m_handles;

...

m_handles = Addressables.LoadAssetsAsync<GameObject>(labels, null, Addressables.MergeMode.Union);
m_handles.Complete += OnComplete;
....

void OnComplete(AsyncOperationHandle<IList<GameObjevct>> obj)
{
	if(obj.Status == AsyncOperationStatus.Succeeded)
    {
    	IList<GameObject> result = m_handles.Result;
    
    }
}

....

vod OnDisable()
{
	m_handles.Complete -= OnComplete;
}

 

3. Addressable 빌드옵션 변경 (중요!)

  • 라벨별로 리소스들을 나누어 보관할 수 있다. 
  • 이렇게 해야 리소스를 로딩할때 속도도 빠르고, 메모리도 덜 사용하게 된다 (불필요한 리소스 로딩x)
  • 위의 라벨울 이용하여 리소스를 분리 한 후 다음의 작업을 한다
  • 유니티 상단 메뉴 -> Window -> Asset Management -> Addressables -> Group 에서 각 그룹 선택
  • Inspector 창 -> Content Packing & Loading -> Bundle Mode 드롭다운 -> Pack Together By Label 선택