이전에는 유니티에서 텍스쳐 등 각종 리소스를 사용하기 위해 Resources 폴더를 만들고, 리소스들을 몰아 넣었다.
이후, 인스펙터나 씬에 해당 리소스들을 직접 연결함으로서 사용하였는데, 이럴경우 문제가 있다.
- 사용하지 않는 리소스 이라도 메모리에 올린다.
- 빌드 결과 파일 용량이 커지고, 메모리 및 로딩속도가 오래 걸린다.
- 미사용 리소스 정리가 어렵다
해서, AssetBundle 이라는 것이 생겼으나, 사용의 불편함 (예 : 모델링 파일 사용시 메쉬 등 도 일일히 미리 로딩 해야함) 이 있어 나온것이
Addressable 이다.
* 주의 : Addressable 로 리소스 등록시, Stack 을 따른다. 즉 Last in First Out이 되므로, 리소스의 순서가 중요하다면 이점을 유의하여 등록하자
Addressable 을 이용하면,
- 리소스를 Resources 에 두지 않아도 된다 (심지어 리소스가 온라인 스토리지에 있어도 된다)
- 태그 이름만으로 해당 리소스를 불러올 수 있다
- 리소스 불러 오는 작업이 비동기로 동작한다
- 연관된 리소스들을 자동으로 불러온다
- 씬 또한 Addressable로 관리가 가능하다.
- 동일한 리소스를 여러곳에서 로딩할때, 메모리할당을 새로 하지 않는다.
- 리소스 릴리즈시, 만일 해당 리소스가 다른곳에서 사용중이라면 릴리즈 하지 않고 나중에 사용중인곳이 없을때 릴리즈 한다
- 즉, 메모리 관리를 알아서 해준다
1. Addressable 설치
- Addressable 을 이용하기 위해 Unity 상단 메뉴 -> Window -> Package Manager -> Unity Registry -> Addressable
설치
2. 기존 Resources 폴더 내 리소스를 Addressable로 전환
- Resources 에 존재하는 리소스 선택
- Inspector -> addressable 에 체크
- Resources 폴더에서 xxx 로 옮기겠냐는 팝업창에서 Yes 클릭
- Unity 상단 메뉴 -> Window -> Asset Management -> Addressable -> Group 클릭시 위치 및 명칭 확인 가능
- 그룹을 변경 할 수도 있다.
- Scene 파일 또한 Addressable로 관리할 수 있다
3. 스크립트에서 GameObject 리소스 로딩 예 (1)
- 비동기로 불러오며, completed 이벤트에서 Instantiate를 통하여 불러온 리소스를 메모리 할당 해야 한다.
....
[SerializeField]
private string address변수명;
private AsyncOperationHandle<GameObject> operation변수명;
.....
on Start()
{
operation변수명 = Addressable.LoadAsync<GameObject>(address변수명);
operation변수명.Completed += 콜백함수명
}
void 콜백함수명(AsyncOperationHandle<Gameobject>obj)
{
if(obj.Status == AsyncOperationStatus.Succeeded)
{
Instantiate(obj.Result, operation변수명);
}
}
void OnDisable()
{
operation변수명.Completed -= 콜백함수명;
}
....
4. Inspector 에서 Addressable 이름 배정
- 불러올 Addressable 이름을 위에서 선언한 변수 Inspector에 넣어주면 된다.
- 반드시 알맞은 이름을 넣어야 하며, 이름은 유니크 하게 만드는것을 추천
- 개발 후 이름변경을 하지 말것을 추천 (빌드를 다시 안하기 위한)
5. Release
- 사용 후 릴리즈를 하고싶다면, 다음의 코드 사용
- 만일, 다른곳에서 사용하고 있는 리소스일 경우, 릴리즈되지 않고, 자동으로 관리해준다
Addressables.ReleaseInstance(AsyncOperationHandle변수명);
'Unity' 카테고리의 다른 글
리소스 관리 - Addressable (3) - Sprite (0) | 2024.02.02 |
---|---|
리소스 관리 - Addressable (2) - Inspector 이용 (0) | 2024.02.02 |
빌드 용량 줄이기 - 2 외부 툴 이용 (0) | 2024.01.31 |
빌드 용량 줄이기 - 1 (ft.빌드 리포트 확인) (0) | 2024.01.30 |
WebGL 에서 VR 개발 (0) | 2023.12.14 |