복잡한 Asset 관리와 동적 로딩을 효율적으로 처리할 수 있도록 Unity에서 제공하는 기능
특히 게임에서 Resource(Texture, Prefab, Audio등)가 많아지고, 이를 Runtime에 Loading하거나 갱신할 때 유용하게 사용됨
Asset을 주소(Address)로 식별하고, Runtime 시 해당 Address를 통해 Asset을 동적으로 Load할 수 있도록 해주는 Unity Package
Addressable을 쓰면 :
- 필요한 Resource만 그때그때 불러올 수 있고
- 필요 없어지면 Memory에서 제거할 수 있고
- 나중에 Server에서 받아오게 할 수 있다
예를 들어 게임에 Boss Prefab 이 있다고 가정한다면
- 일반 방식
- Boss Prefab은 무조건 App 안에 포함됨
- 게임을 시작할 때 Loading이 길어질 수도 있음
- Memory에 항상 올라와 있을 수도 있음
- Addressables 방식
- Boss Prefab을 "주소"로 관리함 ("BossPrefab" 같은 이름)
- Boss가 등장할 때만 불러오고, 끝나면 Memory에서 제거
- 심지어 Server에서 받아오게도 할 수 있어서 Content Update도 가능
| 기존 방식 | Addressable |
|---|---|
| Resources Folder에 넣고 Resource.Load()로 Loading | 주소로 관리하고 Addressable.LoadAssetAsync() 사용 |
| AssetBundle Build/Version 관리가 복잡함 | 자동 Build/Version 관리 지원 |
| Memory 관리 어려움 | 자동 Memory 관리(Caching,Unload)가능 |
| Local 또는 Server Resource수동 관리 | Cloud CDN, 원격 Loading 쉬움 |
//로딩 예시
Addressables.LoadAssetAsync<GameObject>("MyCube").Completed += handle =>
{
if (handle.Status == AsyncOperationStatus.Succeeded)
{
GameObject obj = handle.Result;
Instantiate(obj);
}
};
//Memory 해제
Addressables.Release(handle);
![]()
| 용어 | 뜻 |
|---|---|
| Address | Resource에 붙인 이름표(예:"BossPrefab") |
| Group | Resource를 Folder처럼 묶어 놓는 단위 |
| Catalog | 주소랑 실제 Resource를 연결해주는 주소록 |
| LoadAssetAsync | 주소로 Resource를 불러오는 함수 |
| Release | 더 이상 필요 없는 Resource를 Memory에서 정리 |
| Label | Addressable에서 Resource에 붙이는 "분류용 꼬리표" -> Label로 묶인 Asset들을 한 번에 Download하거나 Load할 수 있음 |