Addressables 에 대해 간단하게 남겨 본다.
유니티에서 제공하는 에셋 관리 시스템으로 에셋을 주소로 식별하여 유연한 로딩, 언로딩, 배포를 가능하게 한다.
Addressables 를 사용 하면 좋은 점은 에셋을 주소로 관리하여 참조 및 로딩이 간단해지고, 비동기로 작동하기 때문에 성능과 응답성을 향상 시킨다. 그리고 메모리 관리도 향상 되어 사용하지 않는 에셋을 언로드하여 최적화 할 수 있다.
마지막으로 최고의 장점은 에셋 묶음을 원격 서버에 업로드하여 어플리케이션을 자체 업데이트 하지 않고 컨텐츠를 갱신 할 수 있다.
패키지 설치
에셋 Addressables로 설정
코드에서 불러오기
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressableExample : MonoBehaviour
{
void Start()
{
string assetKey = "MyPrefab"; // 로드할 에셋의 주소
// 에셋 로드
Addressables.LoadAssetAsync<GameObject>(assetKey).Completed += OnLoadDone;
// 에셋 인스턴스화
Addressables.InstantiateAsync(assetKey).Completed += OnInstantiateDone;
// 에셋 해제
Addressables.Release(obj);
// 인스턴스화 된 게임 오브젝트 해제
Addressables.ReleaseInstance(instance);
}
private void OnLoadDone(AsyncOperationHandle<GameObject> obj)
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject prefab = obj.Result;
Instantiate(prefab); // 에셋 인스턴스화
}
else
{
Debug.LogError("에셋 로드 실패: " + obj.OperationException);
}
}
private void OnInstantiateDone(AsyncOperationHandle<GameObject> obj)
{
if (obj.Status == AsyncOperationStatus.Succeeded)
{
GameObject instance = obj.Result;
// 인스턴스화된 게임 오브젝트 사용
}
else
{
Debug.LogError("에셋 인스턴스화 실패: " + obj.OperationException);
}
}
}
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
public class AddressableExample : MonoBehaviour
{
void Start()
{
// 업데이트 체크
Addressables.CheckForCatalogUpdates().Completed += OnCatalogCheckDone;
}
private void OnCatalogCheckDone(AsyncOperationHandle<List<string>> obj)
{
if (obj.Result.Count > 0)
{
// 업데이트가 있는 경우 다운로드
Addressables.UpdateCatalogs(obj.Result).Completed += OnCatalogUpdateDone;
}
}
private void OnCatalogUpdateDone(AsyncOperationHandle<List<IResourceLocator>> obj)
{
// 업데이트 완료 후 에셋 로드 가능
}
}
Unity Addressables 공식 문서
한글문서는 오래전 문서니 최근 문서를 번역해서 보도록 하자..