Addressable 로 메모리 관리하기

최보훈·2024년 6월 13일
0

MyOsotis

목록 보기
3/7
post-thumbnail

유니티 블로그를 참고해서 정리해 본 Addressable로 메모리 관리하는 방법

예시로 씬에는 InventoryManager스크립트가 있고, 인벤토리 에셋인 검, 보스검, 방패 프리팹 에 대한 참조가 있다.

1단계 : 강한 참조, 어드레서블 X
씬에 있는 Monobehavior내의 프리펩에 강한 참조(인스팩터에서 직접 할당)

이 경우 씬을 로드하면 씬에 있는 모든 오브젝트도 종속성과 함께 메모리에 로드됩니다. 이는 InventorySystem에 포함된 모든 프리팹이 모든 종석성(텍스처, 메시, 오디오 등)과 함께 메모리에 상주하게 된다.

2단계 : 어드레서블 구현
원치 않는 에셋이 로드되지 않도록 하기 위해 어드레서블을 사용하도록 인벤토리 시스템을 변경합니다. 직접 참도 대신 에셋 참조를 사용하면 오브젝트가 씬과 함께 로드되지 않는다.

이 경우 일부 아이템을 삭제하더라도 텍스처가 메모리에 남게되는 문제가 생긴다. 에셋번들은 부분적으로 로드할 수 있는 반면, 자동으로 언로드 할 수는 없기 때문이다.

3단계 : 소규모 번들
문제를 해결하기 위해서 에셋 번들의 구성 방식을 소규모로 변경한다.
변경하는 방법은 어드레서블 그룹을 선택한 다음 BuildMode를 Pack Together에서 Pack Separately로 변경하면 된다.

하지만 이 경우 중복된 에셋들이 메모리에 나타나게 되는 문제가 생긴다.

4단계 :에셋 중복 문제 해결
소규모로 번들을 나누어 에셋을 로드할때 에셋은 단순히 프리펩만 있는것이 아니라 그 내부에는 Mesh, Material 등과같은 종속적인 요소가 있다. 여러 번들에서 같은 종속 요소를 사용한다면, 중복이 발생하게된다.

이러한 중복은
1. 종속성을 공유하도록 프리팹을 동일한 번들에 배치한다.
2. 어드레서블의 다른 위치에 중복된 에셋을 명시적으로 포함한다.
의 방법으로 해결을 할 수 있다.

0개의 댓글