[Unity] Asset 관리

LimJaeJun·2024년 1월 19일

Unity

목록 보기
1/2

리소스 폴더

설명

Resource 폴더에 사용할 Asset들을 관리해주는 방식이다.

사용 방법

// 기본 형태
var resource = Resource.Load("Path");

// 만약 Assets/Resources/Sprites/sprite01.png 에 위치한 파일을 로드하고 싶다면
var sprite = Resources.Load<Sprite>("Sprites/sprite01");

장점

  • 간단하고 직관적이다.

단점

  • 모든 리소스가 미리 메모리에 로드되어 있어 메모리 사용에 제약이 있을 수 있음

  • 패키징을 할 때 모두 빌드가 되기 때문에 다음과 같은 단점이 존재
    - 사용하지 않는 리소스도 포함
    - 빌드 사이즈가 큼
    + 앱시작 시간이 길어짐

  • 코드에서 이름으로 Load하기 때문에 이름을 변경한다면 스크립트에서도 변경해야 함
    + 에셋 이름 변경이 어려움
    + 앱이나 폴더 변경 시 재빌드

이러한 이유들로 유니티에서도 사용을 권장하지 않는다.
이를 보완하여 사용할 수 있는 방법이 존재한다.

에셋번들

설명

묶음 단위로 만들어서 사용하지 않을 때에는 저장 공간에 놔뒀다가 사용할 때만 메모리에 올려서 사용하는 방식이다.

사용 방법

// 원하는 번들(bundleName)을 가지고 오기 위한 작업
assetBundle = AssetBundle.LoadFromFile(Application.streamingAssetsPath + "/" + bundleName);

// 가져온 번들의 이미지를 해당 ui에 할당하는 작업
img0.sprite = assetBundle.LoadAsset<Sprite>("TestImage0");
img1.sprite = assetBundle.LoadAsset<Sprite>("TestImage1");

장점

  • 필요한 에셋만을 번들로 저장하기 때문에 Resource를 사용하는 것보단 효율적이다.
  • 빌드 용량이 작아진다. (사용하지 않는 에셋들은 빌드하지 않기 때문)

단점

  • 하드코딩
    + 변경에 취약하다.
    + 문자열의 오타로 인해 매칭이 끊어버릴 수 있기 때문

  • 종속성 문제
    + 만약 A번들에 a프리팹과 B번들에 b프리팹이 C라는 Sprite를 가지고 있다면 에셋번들은 A번들와 B번들에 모두 C Sprite를 가지고 있는다.
    + (하나를 사용하고 공유하는게 베스트이지만 에셋번들은 그렇지 못함)

어드레서블

설명

어드레스가 할당된 에셋으로써 어드레스를 활용하여 에셋 위치에 상관없이 참조가 가능하다.
에셋 번들에서 언급한 종속성 문제를 어느정도 지니고는 있지만 눈에 가시적으로 볼 수 있는 부분이 많다.

사용 방법

설치

  1. Unity의 PackageManager 탭에서 Addressable 패키지를 Import한다.

프로젝트 적용

  1. 에셋의 Inspector창을 확인하면 Addressable 체크박스가 생긴 것을 볼 수 있다.

  2. 체크를 누른다면

    체크표시가 되며 Address Path가 생긴 것을 볼 수 있다.
    만약 이렇게 바로 체크표시를 한다면 Assets폴더에 Addressable 폴더가 새로 생성될 것이다.

  3. Window > Asset Manager > Addressables > Groups 를 누른다면

    위 사진처럼 어드레서블에 등록이 된 것을 확인할 수 있다.
    새로운 그룹을 만들어 어드레서블 데이터를 관리해줄 수 있다.

3-1. 라벨을 통해 특정 상황에 같은 라벨이 달린 에셋들을 모두 Load할 수 있다.

참고

https://devshovelinglife.tistory.com/398
https://funfunhanblog.tistory.com/377
https://www.youtube.com/watch?v=GsKofci_HSg
https://blog.unity.com/kr/technology/tales-from-the-optimization-trenches-saving-memory-with-addressables

profile
Dreams Come True

0개의 댓글