본문 바로가기
Unity

Addressable Asset System 메모리 최적화 전략

by myroad 2023. 5. 25.

어드레서블 어셋이란 어드레스가 할당 된 어셋을 의미한다. 이 어드레스(주소)를 통해 시스템은 어디서든 해당 어셋을 동일하게 참조할 수 있다.

 

어드레서블 에셋 시스템도 하나의 에셋을 로드하면 그 에셋에 종속된 에셋들 모두 함께 로드하는 시스템이다.

 

문제점 01 - 프리팹을 스크립트의 public 멤버에 바인딩을 하는 것 만으로도 게임 실행시 월드상에 해당 프리팹들을 스폰하지 않아도 해당 프리팹와 종속 어셋들은 모두 메모리에 자동으로 로드된다.

따라서 이 메모리 로드 문제를 해결하기 위해서는 어드레서블 어셋 시스템을 사용해야 한다.

 

문제점 02 - 문제점 01을 해결하기 위해  어드레서블 어셋 시스템을 사용하여 참조을 한다고 해도 어드레서블 어셋 시스템에서 어셋번들 파일안에 있는 어셋을 부분적으로 로드할 수 있지만 언로드시에는 부분적으로 언로드가 안 되는 문제가 있다. 즉 A, B, C어셋이 1번 어셋번들에 포함되어 있는 상태에서 A어셋만 로드할 수 있지만 추후에 B와 C어셋도 로드한 후에 A만 남기고 B와 C만 부분 언로드을 할 수 없다. 따라서 해당 어셋번들에 포함된 모든 어셋들을 언로드하지 않는 이상 부분적인 어셋 언로드은 불 가능하다.

그룹의 어셋들이 하나의 번들에 포함되어 있기 때문에 일부 어셋만 언로드가 불가능하다. 즉 번들안에 있는 여러 어셋들 중에 일부 어셋만 언로드를 할 수 없다.

 

문제점02의 해결 - 이 부분적인 언로드 문제을 해결하는 방법은 어드레서블 그룹의 설정을 통해 해결 할수 있다. 해당 그룹의 인스펙터의 Advanced Option > Bundle Mode을 Pack Separately로 설정하면 된다. 그러면 해당 그룹에 포함되어 있는 각 어셋들은 어셋마다 따로 번들 파일로 생성된다.

Pack Separately설정으로 그룹의 어셋마다 번들파일이 따로 생성됨을 알 수 있다.

 

라벨로 설정된 어셋끼리 하나의 번들파일로 만들고 싶다면 Bundle Mode을 Pack Together By Label로 설정해 주어야 한다.

 

어드레서블 어셋들의 종속성을 분석하고 싶다면 Addressables Analyze을 사용한다.

항목을 선택후 우측 팝업창을 띄워서 Run Analyze Rule을 실행시켜 각 항목에 대한 어드레서블 어셋을 분석할 수 있다.

또한 중복 번들 종속성(Check Duplicate Bundle Dependencies)도 검사할 수 있다.

중복된 어셋이 없다면 No issues found라고 뜰 것이다.

Addressables Event Viewer을 사용할려면 어드레서블 어셋 시스템의 인스펙터에서 Send Profiler Events을 체크해 준 후에 빌드해야 한다.

 

어드레서블 어셋에 대해 다운을 받아서 로드하거나 스폰을 하면 아래와 같이 오브젝트 단위로도 메모리 상태나 로드 상태등을 파악할 수 있다.

 

참고 - https://blog.unity.com/kr/technology/tales-from-the-optimization-trenches-saving-memory-with-addressables