Skip to content

Addressables 분석

Addressables Document

  • Resources.Load는 메모리 관리가 불가능, 모든 리소스가 런타임 동작 시 메모리에 올라감.
  • 모든 리소스가 빌드에 포함 됨 -> 초기 빌드 사이즈 증가
  • 업데이트 시 앱을 재배포 해야 함
항목의미
Lazy Loading- 필요한 시점에만 리소스를 로드하여 메모리 절약
- DLC형태로 번들별로 나누어 로딩 가능
Catalog 기반- 원격 번들 구조를 메타데이터(Catalog)로 관리
- catalog는 json 형태로 구현되며, Addressables 내부에서 알아서 처리 가능
- 각개의 파일 별로도 버저닝하여 체크 및 다운로드 가능
CDN 연동- Firebase, GCS, S3, Cloudflare 등 CDN 사용 가능
graph TD
AppStart --> LoadCatalog
LoadCatalog --> GetLocations
GetLocations --> DownloadBundles
DownloadBundles --> LoadAsset
LoadAsset --> Instantiate
개념설명
CatalogAddress -> Bundle 매핑 정보
Bundle실제 Asset들이 모인 Pack 개념의 형태
Provider로딩 방식 (Local ? Remote ?)

하나의 Prefab을 아래의 방법으로 호출했을 때 …

3.1 LoadAssetAsync vs InstantiateAsync 차이점

Section titled “3.1 LoadAssetAsync vs InstantiateAsync 차이점”
항목LoadAssetAsyncInstantiateAsync
반환 타입Asset 원본 (Prefab, Sprite, ScriptableObject 등)Scene에 배치된 GameObject 인스턴스
GameObject 생성❌ 생성 안 함✅ 즉시 생성
의존성 로딩✅ 관련 번들 로드✅ 관련 번들 로드
실제 사용 가능 시점Asset 참조만 가능, Instantiate 필요바로 활성 상태로 사용 가능
메모리 사용Asset 메모리만 점유Asset + Instance 메모리 점유
Pooling 연계직접 Instantiate + Pool 구성 필요Instance를 그대로 Pool에 반환 가능
재사용 전략동일 Asset 여러 번 Instantiate 가능Instance 재사용이 일반적
Release 대상Asset Handle 해제Instance + Asset Handle 관리 필요
Addressables.ReleaseAsset 수명 관리 중심Instance 반환 후 ReleaseInstance 필요
대량 생성 성능Instantiate 비용 발생동일 (내부적으로 Instantiate 수행)
UI / Popup 사용 적합성❌ 번거로움✅ 매우 적합
Data Asset 사용✅ ScriptableObject, Config 로딩에 적합❌ 부적합
실수하기 쉬운 점Asset만 Release하고 Instance 참조 남김Pool에 넣어두고 Handle Release하면 터짐