본문 바로가기

Unity/Tips

[Unity] Addressable Asset System

728x90
반응형

 

 

 

에셋 번들(Asset Bundle)

  • 어드레서블 에셋 시스템(Addressable Asset System)을 알기 위해서는 에셋 번들에 대해서 이해를 하고 있어야 한다.

 

 

 

에셋(Asset)들을 묶은 파일 (모델, 텍스처, 프리펩, 씬 등 모든게 될 수 있다.)
  • 그래서 보통은 DLC용으로 많이 사용한다. 패치용/업데이트라던지 등등

 

 

개발자는 에셋 번들을 서버에 올리고, 플레이어는 서버에 올려져 있는 에셋 번들을 다운받아 사용한다.

  • 특히나 모바일에서 에셋 번들을 사용하는 것은 필수적인 기능이라고 할 수 있다.
  • 하지만 에셋 번들의 경우 메모리에서 문제가 종종 발생하곤한다.
  • 코드도 많이 복잡해진다.

 

 

 Ienumerator Start()
 {
 	var bundleUrl = Path.Combine(remoteUrl, carBundleName);
    var webReq = UnityWebRequest.GetAssetBundle(bundleUrl);
    var handler = webReq.downloadHandler as DownloadHandlerAssetBundle;
    yield return webReq.Send();
    
    var bundle = handler.assetBundle;
    
    if(bundle != null)
    {
    	var prefab = bundle.LoadAsset<GameObject>(carName);
        
        if(prefab != null)
        	GameObject.Instantiate(prefab, this.transform, false);
	}
}
  • 하지만 이대로 사용해서는 안된다. 에셋들간의 종속성(Dependency)이 연결되어 있지 않은 형태이다.
  • 에셋 번들의 종속성을 무시하고 무작정 읽게 되면 메모리에 에셋이 중복되어 올라가는 현상이 일어날 수 있다.
  • 종속성을 체크하면서 다운받아올지 말지 검사하는 코드를 넣게 되면 짧았던 코드들이 엄청 복잡해진다.

 

 

 

에셋 번들은 사용해야하는데... 코드의 양은 늘어나고 복잡해진다..
→ 어드레서블 에셋 시스템 탄생

 

 

 


 

 

 

어드레서블 에셋 시스템(Addressable Asset System)

 

 

  • 에셋자체에다 주소(이름)를 지정해 줄 수 있다. 그렇기 때문에 관리하기도 편해지고 코드도 간단해진다.
  • 런타임 메모리 관리도 좋아지고, 에셋 참조와 패키징의 분리를 할 수 있다.
  • 어드레서블의 바탕은 에셋 번들이고 기존의 에셋 번들을 사용하기 쉽게 랩핑했다고 생각하면 된다.

 

에셋 번들에서처럼 비동기식으로 호출 및 적용시켜주면 된다.

 

728x90