Asset Bundle / Addressable 을 이용하면, 게임 로딩할 때 추가 파일 다운로드를 구현할 수 있습니다.
https://www.youtube.com/watch?v=Z84GCeod_BM 더블엘님의 Addressable 영상을 참고했습니다.
Addressable System overview
Addressable 은 Asset 들을 효율적으로 관리하기 위한 확장된 시스템입니다.
Set Up
Addressables 셋업 부터 해보겠습니다.

먼저 Package Manager 에 들어가서 Addressable 패키지를 설치해 줍니다.

그 다음, Window > Asset Management > Addressable > Groups 를 눌러,

Addressablees Groups 창을 띄웁니다.

Profile 버튼을 눌러 Addressables Profiles 창에서 관리할 수 있습니다.
생성된 Default Asset Group 의 Inspector 에서

Cache Clear Behavior > Clear When When New Version 으로 선택하여,

변경 사항이 있을 때마다 다운 받는 번들을 따로 저장하지 않고, 기존의 번들을 업데이트하는 방식으로 설정합니다.

System Settings 에서 Unique Bundle IDs 를 체크합니다. (기존거 제외하고 새로운 것만 추가하기 위해)

Send Profiler Events 를 체크해 로드되고 언로드 되는 걸 Event Viewer 에서 확인합니다.
※ 2025년 6월 Unity6000 기준 해당 메뉴가 등장하지 않기도 하는 것 같습니다.

Build Remote Catalog 를 '꼭' 체크해 카탈로그의 사본을 생성하고 서버에 올려 불러올 수 있습니다.

Build & Load Paths 는 Remote 로 설정합니다.

+ 그룹 설정 창에서도 Build & Load Paths 메뉴를 꼭 Remote 로 변경해주셔야합니다.
Addressable 등록

일단 폴더를 생성한 뒤, 폴더 안에 Addressable 에 등록하고자하는 오브젝트를 Prefab화 시켜줍니다.

Prefab화 된 오브젝트를 클릭해 보면, Addressables 가 추가되어져 있으며, 체크합니다.

그러면 Groups 창에 해당 Prefab이 등록된 것을 확인하실 수 있습니다.

+ Materials 는 등록되어지지 않기 때문에 따로 등록해주셔야 합니다.

편하게 Label 을 통해 구별할 수 있으며, 용도에 따라 따로 그룹을 지어 묶을 수도 있습니다.

+ 새로 추가한 그룹도 꼭! Build & Load Paths 를 Remote 로 설정하고
Cache Clear Behavior > Clear When When New Version 으로 맞춰주셔야 합니다.

오디오와 같은 Project 내의 파일도 (.mp3, .wav, .png 등...) 도 Addressable 을 체크해 등록할 수 있습니다.
Script 편집
C# script 파일 하나를 생성합니다.
using UnityEngine.AddressableAssets;
네임스페이스를 불러온 뒤,
private void Start()
{
StartCoroutine(InitAddressables());
}
IEnumerator InitAddressables()
{
var init = Addressables.InitializeAsync();
yield return init;
}
Addressable 을 초기화 해주겠습니다. (필수는 아니라네용)
[SerializeField]
private AssetReferenceGameObject butterObj;
// 오브젝트를 불러온 후, 할당 해제를 위한 리스트
private List<GameObject> gameObjects = new List<GameObject>();
public void Button_TestSpawn()
{
// butterObj.InstantiateAsync(); 이렇게만 써서 호출해도 되고,
// 아래처럼해서 람다형식으로 리스트에 추가합니다.
butterObj.InstantiateAsync().Completed += (obj) =>
{
gameObjects.Add(obj.Result); // InstantiateAsync() 가 끝난 후 해제해야하기 때문에 List 에 추가
};
}
(UI 버튼으로 생성하려구 Button_TestSpawn 메서드로 만들었어용)
오브젝트를 생성할 때는 Instantiate 이며, Addressable 에서는 InstantiateAsync 입니다.
InstantiateAsync 호출이 완료된 후 리스트에 추가합니다. (나중에 할당된 오브젝트를 해제 해야하므로)

+ 씬에 AddressableManager 오브젝트를 만들어 해당 스크립트와 오브젝트를 할당해주시는 것도 잊지마세요!


어드레서블 그룹스 창으로가 Build > New Build > Default Build Script 를 눌러줍니다.
빌드가 완료되면 Report 창이 뜹니다.

Play Mode Script > Use Asset Database 를 누릅니다.
+ 아, 실행한 뒤 어드레서블 프리팹들이 생성되니까. 하이러키 창에 있는 어드레서블 프리펩 들은 지워주셔요!



테스트 해보니, 빨간 버튼을 누를 때 마다, 제가 설정한 위치 (좌측)에 어드레서블 프리팹 오브젝트(버터)들이
생성되는 것을 볼 수 있습니다. (YAY~ *⸜( •ᴗ• )⸝*)
public void Button_TestRelease()
{
if (gameObjects.Count == 0)
return; // 0 개면 그냥 메서드 종료
var index = gameObjects.Count - 1;
Addressables.ReleaseInstance(gameObjects[index]); // 인덱스에 맞게 릴리즈메서드하여, 메모리에서 해제하고 제거
gameObjects.RemoveAt(index);
}
ReleaseInstance 메서드는 InstantiateAsync 로 생성된 오브젝트를 메모리에서 해제하고 제거해줍니다.
(ReleaseInstance ↔ InstantiateAsync)

아까 위에서 UI Button 을 눌렀을 때 생성한 것 처럼, Release 버튼을 만든 후 눌러보니,
생성된 오브젝트가 잘 해제되는 것을 확인할 수 있습니다.
다음 포스트엔 어드레서블 메서드와 프로퍼티들, 서버 전용 내용도 정리하도록 하겠습니다.
그럼 좋은 하루 되세용~ ( ⸝⸝•ᴗ•⸝⸝ )੭⁾⁾
참고 : https://www.youtube.com/watch?v=Z84GCeod_BM
'- Unity > let us all UNITE !' 카테고리의 다른 글
| [Unity] (0) | 2025.06.21 |
|---|---|
| [Unity] Asset Bundle & Addressables (0) | 2025.06.20 |
| [Unity] Getting started with UniRX ( Observer Pattern ) (1) | 2025.05.22 |
| [Unity] Awake OnEnable Start (0) | 2025.05.17 |
| [Unity] Update FixedUpdate LateUpdate (0) | 2025.05.16 |