그룹을 만드는 방법
1. 모든 리소스를 어드레서블로 사용 + 세부 그룹을 만들고 트리 구성
- 참조하는 모든것에 대한 세부항목에 라벨 지정가능
- 각 오브젝트별로 Group가 생성되서 그룹 생성파일이 많이 생김
- Bundle Mode = Pack Together 사용
 |
Monster2-Forest-Beez |
2. 폴더를 어드레서블로 사용
- 세부 항목에 대한 개별 조작은 불가능(폴더의 라벨지정하면 세부도 동일하게 따라감)
- 세부 항목에는 어드레서블이 체크되지 않음(그러나 사용가능)
- 큰 그룹별로 설정파일 관리(ex Monster-Forest)
- Bundle Mode = Pack Separately를 사용하여 몬스터별로 번들이 생성되도록 처리
 |
Monster-Forest |
3. 에셋번들을 생성 후 해당 에셋번들을 어드레서블로 사용
(Unite 2019에서 소개하는 PPT에서 이렇게 사용하긴 했는데.. 에셋번들을 사용해본적 없어서 패스)
보통 설명을 보면 참조되는 리소스를 전부 Addressable로 만들지 않고, 프리팹만 Addressable 화 시킴. 그리고 빌드를 하면 참조되는것 전부 자동으로 묶어서 생성됨.
이렇게하면 어드레서블 그룹창에서는 관리가 편해지지만, 리소스에대한 관리가 명시적이지 않아서 추후 실수 할것같은 느낌이 듬.
폴더를 어드레서블로 했을때 유의사항
Beez <- 어드레스 네임으로는 로드 및 다운로드가 불가능하다.
1. Label 을 이용.
2. 하위항목을 직접 선택해서 불러오기를 사용해야 한다.
ex) Beez/Beez_Honey.prefab
기본사용법
//다운로드 하기
downHandle = Addressables.DownloadDependenciesAsync(key, true);
//downHandle.PercentComplete -> 잘못된 수치가 표현됨
text = Mathf.Round(downHandle.GetDownloadStatus().Percent * 100) + " %";
//다운로드한 파일 삭제
Addressables.ClearDependencyCacheAsync(key);
//다운로드 사이즈 구하기
Addressables.GetDownloadSizeAsync(key).Completed +=
(AsyncOperationHandle<long> sizeHandle) =>
{
string sizeText = string.Concat(sizeHandle.Result, " byte");
Addressables.Release(sizeHandle);
};
//리소스 로드
//여러번 핸들에 넣어도 내부적으로 주소가 참조되는지 전부 들어가있음.
_handle = Addressables.LoadAssetAsync<GameObject>(key);
//Load한 만큼 Release 가능.
Addressables.Release(_handle);
// 콜백 방식
Addressables.LoadAssetAsync<GameObject>("AssetAddress").Completed += OnLoadDone;
// 대기 방식
var asset = await Addressables.LoadAssetAsync<GameObject>("AssetAddress").Task;
처음에는 리소스로드 후에 캐싱해서 Instantiate 해서 사용하려고 했었는데.
단점으로 Addressable 에서의 메모리 관리가 되지 않음.
(GameObejct.Destory(obj); 를 하더라도 .Net의 가비지를 통해서 처리 되기 때문에)
물론 기존 프로젝트는 특별한 메모리 관리 없이 사용했기 때문에 문제는 없지만,
Addressable 의 최대장점인 리소스의 메모리를 확실하게 관리 할수 있는것을 포기 하기 어려움.
(물론 Load 후에 Instantiate 사용한다 하더라도 좀더 어려울뿐 불가능한 것은 아니다. )
Try - Catch 에 Exception 이 캐치되지 않음. 내부코드를 보니 throw 하지 않음.
별도로 로그를 관리하는 경우에는 , 아래와 같이 핸들에 excption 있는지 체크하고 오류가 있을경우에 표시한다.
if(handle.OperationException != null)
LogHelper.LogError(handle.OperationException.ToString());
혹시나해서 폴더째로 Addressables을 만들었을때 하위항목을 로드하면 전체 부모쪽이 로드되는것이 아닌가 했는데, 테스트해보니 연관된것만 로드됨.