![[어드레서블] - 기본 및 사용법](https://img1.daumcdn.net/thumb/R750x0/?scode=mtistory2&fname=https%3A%2F%2Fblog.kakaocdn.net%2Fdn%2Fcy983F%2FbtsIWD8ihQS%2FSNkifBcUBPrun4riJZK8vk%2Fimg.png)
최근에는 어드레서블을 서버에서 다운받는 작업을 진행했다.
정보가 있는듯 없는듯 해서 꽤나 애를 먹었다.
작업을하며 알게된 내용들을 조금 정리해볼까 한다.
어드레서블
어드레서블은 에셋번들과 같은 자산관리 시스템이다.
개발자가 할게 많은 에셋번들과는 달리 에셋번들을 한번 매핑해서 조금 더 쉽게 만든 시스템이라고 한다.
Resources 폴더로 자산들을 관리한다면 아래와 같은 단점들이 있다.
- 빌드에 모두 포함 됨.(어드레서블도 로컬에 저장한다면 포함)
- 초기에 자산들이 로드되기 때문에 로딩 시간이 길어짐
- 런타임에 한꺼번에 메모리에 로드
반대로 어드레서블을 사용한다면 어느정도 극복이 가능하다.
특히나 모바일 게임이라면 유저들이 마켓에서 보게되는 큰 용량,
초기에 느껴지는 느린 로딩들은 이탈에 상당한 영향을 끼치지 않을까 싶다.
시작하기
패키지매니저에서 어드레서블을 다운받아준다.
그리고 window - Asset Management - Addressables - Groups 창을 킨다.
이 창이 뜨면 이제 어드레서블을 관리하고 사용이 가능하다.
프로필
어드레서블 그룹창의 상단을보면 프로필이 있다.
프로필을 저기서 고를수가 있는데, 제일 하단에 Manage Profiles를 눌러보자.
이 창에서는 프로필을 만들 수 있고 프로필에 변수를 넣을 수 있다.
따로 다른 설정을 해주지 않는다면
로컬and리모트(서버) 어드레서블은 빌드하면 어떤 폴더에 빌드파일을 생성할건지,
런타임에 불러온다면 어디서 불러올지를 설정하는게 전부다.
좌측 상단에서 변수를 생성할수도 있긴 한데, 쓸 일은 없었다.
코드에서 프로필을 통해 변수값을 가져 올 수 있다.
우리가 서버에 연결하기위해 세팅을 잘 해야할곳은 Remote.LoadPath다.
어디서 번들을 불러올것인가? 이기때문에 잘 적어주어야 한다.
어드레서블은 컴퓨터/안드/IOS마다 각각 빌드를 해주어야 하기 때문에,
주소/[BuildTarget] 으로 설정해두면 알아서 빌드 타겟으로 폴더를 만든다.
(하단에 BuildTarget 변수가 있다.)
주소를 코드에서 참조하고 싶다고 한다면 변수나 프로퍼티를 static으로 만들어서 대괄호 안에 넣어주면 된다.
ex. [클래스.AddressableUrl]/[BuildTarget]
Play Mode Script
Play Mode Script는 에디터에서 어떤식으로 어드레서블을 불러올지에 대한 설정이다.
Use Asset Database는 그냥 로컬에있는 파일을 바로 불러온다.
이 옵션을 설정하고 에디터에서 플레이한다면 서버에서 어드레서블을 불러와서 플레이할때의 문제점을 찾아낼 수 없다.
단순히 내가 작업한 인게임 컨텐츠들을 확인할때 이 모드로 해놓고 사용했다.
Use Existing Build 는 실제로 빌드를 플레이하는것처럼 어드레서블을 불러온다.
서버에서 어드레서블을 실제로 다운받으며, 저장된다.
서버에서 받는게 실패하면 에러를 낸다.
Simulate Groups는 두개의 중간이라고 들었는데 딱히 써본적도 없고 쓸일이 없었다.
Build
New Build는 말그대로 새로운 어드레서블 빌드를 하는것,
Update a Previous Build는 기존 빌드를 기반으로 업데이트를 한다.
빌드하면 생성되는 addressables_content_state.bin 파일이 있어야한다.
어드레서블 설정
Tools - Inspect System Settings로 들어가도 되고, AddressableAssetSettings.asset을 찾아 눌러도된다.
정말 무수히 많은 설정들이 있어서 나도 아직 다 모르지만, 중요한것만 알고가면 좋을 것 같다.
Profiles
제일 상단에 Profile In Use 는 아까 설정해둔 프로필을 골라주면 된다.
Catalog
Player Version Override는 번들에 버전을 붙일 수 있다.
비워두어도 상관없는데, 비워두면 카탈로그 파일명에 빌드한 시간이 찍힌다.
서버에서 어드레서블을 받을거라면 Build Remote Catalog를 선택해주고,
Build & Load Paths를 Remote로 설정해주면된다.
저 이름과 주소는 아까 설정했던 프로필에서 가져온다.
Only update catalogs manually는 수동으로 카탈로그를 업데이트 하게하는 설정이다.
난 그냥 어드레서블을 초기화할때 알아서 업데이트 해주는게 편해서 체크하지 않았다.
- Build Addressables on Player Build
게임 빌드를 할때 어드레서블도 같이 할지 말지
- Ignore Invalid/Unsupported Files in Build
어드레서블 빌드할때 지원 안하는 파일들 무시할지
- Non-Recursive Dependency Caculation
재귀적으로 종속성을 계산하지 않는 옵션
ex. A와 B가 모두 C를 필요로 한다면, C를 1번만 추가 하는 옵션으로 알고 있다.
그룹
어드레서블은 그룹으로 분류를 할 수 있다.
어드레서블 그룹창에서 오른쪽 클릭을 통해 새로운 그룹을 만들 수도 있다.
기본설정으로는 빌드하면 그룹별로 번들이 나오지만, 그룹안에서 더 쪼갤수도 있다.
덩치가 큰 그룹을 만들어서 한번에 관리할지, 나눠서 세밀하게 관리할지는 본인의 선택이다.
그룹 설정
안타깝게도 그룹을 클릭해보면 또 많은 양의 설정들이 나온다.
대부분 기본값을 사용해도 되긴하는데 간략하게 중요한것들만 보자면,
-Build&Load Paths
아까 설정했는데 왜 또 설정하지? 싶지만 그룹별로 로컬로 쓸지, 서버에서 가져올지를 선택할 수 있다.
로컬에 포함시키고 싶은 어드레서블 그룹은 Local로 설정해두면 되고
서버에서 불러올거라면 Remote를 선택해준다.
-Include in Build
처음에는 게임 빌드를 얘기하는 줄 알았는데, 이걸 체크 해제하면 어드레서블 빌드를 했을때 이 그룹의 번들 자체가 안생긴다. 빌드해야하는 그룹이라면 체크 해주어야한다.
-Use Asset Bundle Cache
어드레서블은 다운받은 번들을 캐싱해두고 사용한다.
매번 다운받게하지 않을거라면 체크
-Asset Bundle CRC
데이터가 손상되었는지 확인하는 옵션이다.
-Bundle Mode
번들을 더 쪼갤지 말지 선택이 가능하다.
-Bundle Naming Mode
기본으로 하면 빌드된 번들 이름에 해쉬값을 붙이는데, 이게 싫다면 그냥 Filename으로 설정해서 깔끔한(?) 파일명으로 나오게해도 된다.
라벨
어드레서블에는 라벨이 존재한다.
라벨은 여러개를 붙일수있고, 붙이지 않을수도 있다.
하지만 리소스를 다운받기위해서 라벨을 이용해야하기 때문에 잘 세팅을 해주는것은 상당히 중요하다.
어드레서블 추가
어드레서블 추가는 2가지 방법이 있다.
첫번째로는 어드레서블로 적용하고 싶은 파일을 누르고 좌측상단에 어드레서블을 체크하는것
두번째로는 그냥 Group창에 Drag & Drop 하는것
그룹으로 드래그앤 드랍을 한게 아니라면
기본으로는 디폴트 로컬 그룹에 들어가며, 어드레서블 이름이(키값) 풀 주소로 되어있다.
그럴땐 오른쪽 클릭 후 Simplify Addressable Names를 누르면 파일명만 깔끔하게 남는다.
그룹을 눌러서 적용하면 그룹에 속해있는 모든 어드레서블에 적용한다.
어드레서블 사용법
키값
using UnityEngine.AddressableAssets;
public async void AddressableTestAsync()
{
//에셋 로드
var sprite = await Addressables.LoadAssetAsync<Sprite>("키값"); //비동기
var sprite2 = Addressables.LoadAssetAsync<Sprite>("키값").WaitForCompletion();//동기
//오브젝트 생성
var obj = await Addressables.InstantiateAsync("키값");//비동기
var obj2 = Addressables.InstantiateAsync("키값").WaitForCompletion();//동기
}
번들이 로컬이거나 다운받아져있다는 가정하에,
어드레서블 이름(키값) 을 이용해서 에셋을 불러오고 생성이 가능하다.
기본적으로는 비동기 함수를 지원하지만, WaitForCompletion 함수를 통해 동기도 가능하다.
Asset Reference
public AssetReference asset;
public async void AddressableTestAsync()
{
var loadAsset = await asset.LoadAssetAsync<Sprite>();
await asset.InstantiateAsync();
}
Asset Reference를 통해서도 사용이 가능하다.
그냥 프리펩을 연결하듯이 어드레서블에 등록해두었다면 선택이 가능하다.
키값없이 바로 함수를 이용해서 사용하면 된다.
서버에서 어드레서블 다운 글도 포스트 해두었습니다.
https://dev-junwoo.tistory.com/160
[어드레서블] - 서버에서 다운받기
처음이시라면 기본 정보를 보고나서 보시길 추천드립니다. https://dev-junwoo.tistory.com/159 [어드레서블] - 기본 및 사용법최근에는 어드레서블을 서버에서 다운받는 작업을 진행했다.정보가 있는듯
dev-junwoo.tistory.com
'게임 엔진 > Unity' 카테고리의 다른 글
[어드레서블] - 서버에서 다운받기 (3) | 2024.08.10 |
---|---|
Jenkins로 유니티 빌드 자동화 (1) | 2024.05.09 |
Unity 라이브러리 추천 - RestClient (0) | 2024.03.24 |
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 3편 (1) | 2024.03.23 |
Github Action으로 Unity 자동 빌드 제작해보기 (CI/CD) - 2편 (0) | 2024.03.23 |
포스팅이 좋았다면 "좋아요❤️" 또는 "구독👍🏻" 해주세요!