본문 바로가기
- Unity/let us all UNITE !

[Unity] Addressable #1 (Local)

by david_동근 2025. 6. 19.

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