부트캠프/Unity [ 스파르타 ]

[스파르타 ][TIL] 유니티 스파르타 7기 40일차 - 어드레서블

맏난거 2025. 4. 4. 23:58

 

✅ 어드레서블 기본 개념

  1. Addressables 패키지를 설치합니다 (Unity Package Manager에서 설치 가능).
  2. Addressables 그룹에 에셋을 등록합니다.
  3. 에셋에 주소(Address) 를 부여한 뒤, 코드에서 그 주소를 이용해 로드합니다.

📂 1. 단일 파일 로드하기

단일 파일은 텍스처, 프리팹, 사운드 등 개별 오브젝트를 직접 로드할 때 사용합니다.

📌 예시: 프리팹 로드 후 인스턴스화

using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class SingleAssetLoader : MonoBehaviour
{
    [SerializeField] private string prefabAddress = "MyPrefab"; // Addressables 창에서 설정한 주소

    void Start()
    {
        Addressables.LoadAssetAsync<GameObject>(prefabAddress).Completed += OnLoaded;
    }

    private void OnLoaded(AsyncOperationHandle<GameObject> handle)
    {
        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            GameObject prefab = handle.Result;
            Instantiate(prefab, Vector3.zero, Quaternion.identity);
        }
        else
        {
            Debug.LogError("Failed to load prefab");
        }
    }
}

📁 2. 그룹화된 파일 (에셋 리스트) 로드하기

그룹화된 에셋은 태그나 라벨(Label)을 붙여 여러 에셋을 한 번에 불러올 수 있습니다.

✅ 준비

Addressables 창에서 여러 에셋을 선택하고, Label(라벨) 을 예: "EnemyPrefabs" 로 지정합니다.

📌 예시: 라벨로 여러 프리팹 로드하기

using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;

public class GroupAssetLoader : MonoBehaviour
{
    [SerializeField] private string label = "EnemyPrefabs";

    void Start()
    {
        Addressables.LoadAssetsAsync<GameObject>(label, null).Completed += OnGroupLoaded;
    }

    private void OnGroupLoaded(AsyncOperationHandle<IList<GameObject>> handle)
    {
        if (handle.Status == AsyncOperationStatus.Succeeded)
        {
            IList<GameObject> prefabs = handle.Result;
            for (int i = 0; i < prefabs.Count; i++)
            {
                Instantiate(prefabs[i], new Vector3(i * 2f, 0, 0), Quaternion.identity);
            }
        }
        else
        {
            Debug.LogError("Failed to load group of prefabs");
        }
    }
}

💡 참고

  • 비동기 방식이기 때문에 로딩 중 UI 처리 등을 함께 고려해야 합니다.
  • 사용 후 Addressables.Release() 를 호출하여 메모리에서 해제해주는 것이 좋습니다.
  • 번들 사이즈 최적화, 원격 로드, 업데이트 등을 Addressables로 쉽게 구현할 수 있습니다.