에셋번들&어드레서블

Amberjack·2024년 3월 22일
0

Unity

목록 보기
44/44

인스펙터 연결

컴포넌트에 데이터를 연결, 인스펙터창을 통해 연결하는 방법.

Resources 폴더

사용할 리소스들을 넣어놓고 경로를 찾아 Resources.Load를 통해 사용.
경로를 사용하여 가져오기 때문에(문자열), 외부에서 세팅한 값으로 불러오기 쉽다. 그러나 에셋의 경로가 바뀌면 경로도 수정해야 한다.

빌드할 때 포함되는 데이터
빌드 세팅에 포함된 Scene, Scene에 올라간 오브젝트, 오브젝트에 참조된 데이터

Resources 폴더 : Resources 폴더 자체를 빌드에 포함됨.

StreamingAssets 폴더 : 빌드를 할 때 APK나 EXE파일을 만들 때, 빌드에 포함이 되는 데이터들은 모두 압축이 되어 빌드가 되는데, StreamingAssets 폴더에 있는 에셋들은 압축되지 않고 빌드에 포함이 된다. -> StreamingAssets은 빌드 이후에도 수정할 수 있다.

Plugins : 안드로이드나 애플의 네이티브 기능(카메라, AR 기능 등...)을 사용하기 위한 플러그인들...

문제점

용량이 올라감. -> 빌드 시간 증가, 다운로드 용량 증가. -> 접근성 Down!

수정이 필요하면 다시 빌드해야 할 필요가 있음.

에셋 번들

프로젝트를 실행 파일, 에셋 파일로 나누어 빌드할 수 있다.

실행 파일 : exe, apk, texture 등...

에셋 파일 : Scene, Prefab, Texture 등...

ex) 게임을 스토어에서 받은 후, 게임에 들어가면 추가적인 데이터를 받는 경우가 있는데, 이게 에셋 번들을 활용하여 실행 파일과 에셋 파일을 분리했기 때문이다.

스토어에서 받은 게임 파일 -> 실행 파일
인게임에서 패치받는 파일 -> 에셋 파일

AssetBundleGenerator 만들기

Unity의 Editor 폴더에 넣어놓아야 동작함!!!!!!!

Editor 폴더 밑에 있는 것들은 빌드에 포함이 안된다고 하심.
BuildPipeLine.BuildAssetBundles()를 통해 만들 수 있음!

플랫폼마다 에셋 번들을 만들어야 한다. -> 플랫폼마다 Texture 최적화가 다르기 때문에 플랫폼마다 성능차이가 발생할 수 있다.

에셋 번들을 사용하는 이유?

-> 서버를 통해 에셋 파일을 받아올 수 있다.

단점?

전문적으로 에셋을 관리 할 수 있지만, 사용하기 위해서는 번들을 계속 만들어줘야 함.
-> 테스트할 때는 Resources로 만들고, 이후에 배포할 때 번들을 생성하는 로직을 만들기도 한다.

버늗ㄹ 내부적으로 경로를 관리할 필요가 있음

리소스 로드 시, 필요 없어지면 언로드를 해야 함

종속성 이슈 : 캐릭터에 스킬이 잇을 때, 스킬이 아직 로드되지 않은 상태에서 캐릭터를 로드하면 문제가 발생할 수 있음!

어드레서블

내부적으로는 에셋 번들로 만들어져 잇어 전문적으로 에셋을 관리할 수 있음. 그러나 에셋 번들의 단점들을 보완할 수 잇음

어드레서블 사용 시 패키지를 다운받아야 함.

어드레서블 사용 시 고려 사항

어드레서블 사용 시 데이터 사용 동의를 구해야 함.

캐싱

데이터가 없을 시 다운.
다운로드 데이터가 있을 시, 서버 데이터와 로컬 데이터가 다르면 에셋 업데이트, 같다면 저장된 에셋을 사용.

런타임에서 사용을 위해 로드를 해야 함

그룹 / 라벨에 따라 다양한 방법으로 로드할 수 있음. 리소스 하나 수정했다고 게임 리소스 전체를 업데이트할 필요 없이, Group으로 묶어서 단위로 분류, 그룹별로 업데이트를 할 수 있음.

라벨 관리: 실시간으로 활용할 때 모든 리소스를 로드하고 사용하지 않음. 상황에 따라 필요한 리소스만 준비하여 사용.

Scene 입장 시, 필요한 데이터를 실시간으로 로딩하려면 딜레이가 걸릴 수 있음. 관련된 리소스를 미리 준비(로딩 화면 사용)
Label을 통해 카테고리를 나누는 것이 가능(특정 던전에서 나올 몬스터들을 라벨로 분류). Scene을 떠나면서 사용하지 않는 리소스 해제.

UI관리 : UI는 특정 화면에서 필요하기 보단 전반적으로 필요한 경우가 많다.
UI 요청 시 생성 시작, 이후 캐싱하여 재활용
로드 시간이 걸릴 수 있지만, 모바일의 경우 API 통신으로 필요 데이터를 불러오는 경우가 많기 때문에, 데이터 통신 시간이 어차피 필요하므로, 통신과 UI 로드가 모두 완료되면 활성화시켜주면 된다. -> 주기적으로 리소스를 해제시켜줄 것. 씬 전환 시...

사용이 끝나면 메모리 해제를 해야함.

레퍼 카운트를 체크해주는 기능이 있다!!!

어드레서블 받기 전 필요한 데이터들은 앱에 포함시킬 것.

다운로드 안내 / 동의 텍스트, UI 등은 하드코딩을 하더라도 포함시켜놓을 것. 안그러면 고소당할 수 있음

비동기 처리!!!

어드레서블의 가장 큰 난관이라고 하심.

0개의 댓글