Company
교육 철학

Unity Addressable Asset System 가이드

어드레서블 패키지 설치
2-1 select-package-manager
2-2 install-addressables
Windows > Package Manager 선택.
Addressables 검색 후 설치.
어드레서블
어드레서블 설정 생성
3-1 select-addressables-groups
3-2 create-addressable-settings
Windows > Asset Management > Addressables > Groups 선택.
Create Addressables Settings 클릭.
그룹 생성
4 create-groups
Assets\ExampleAssets 폴더처럼 Materials, Models, Prefabs, Shaders, Textures 로 분류.
_Addressable Groups_창에서 Create > Group > Packed Assets 선택 후 이름 변경.
어셋을 어드레서블로 만들기
5-1 move-assets-to-addressable-group
5-2 simplify-addressable-names
어셋들을 Assets\ExampleAssets 폴더에서 _Addressable Groups_창의 적절한 그룹으로 이동.
이름을 간략화하기 위해 어셋들을 선택한 후 우클릭 Simplify Addressable Names 선택.
레이블 추가
6-1 create-labels
6-2 add-labels
Tools > Labels 선택.
이전 단계에서 생성했던 그룹에 따라 레이블 생성.
각각의 어드레서블에 적절한 레이블 추가.
기존 오브젝트 제거
7 remove-existing-objects
씬에서 Example Assets 게임오브젝트 아래의 Workshop SetProps 제거.
스크립트
아래 두 클래스를 추가.
AddressablesLoader.cs
using System.Collections.Generic; using System.Threading.Tasks; using UnityEngine; using UnityEngine.AddressableAssets; public static class AddressablesLoader { public static async Task InitAssets<T>(string label, List<T> createdObjs, Transform parent) where T : Object { var locations = await Addressables.LoadResourceLocationsAsync(label).Task; foreach (var location in locations) { createdObjs.Add(await Addressables.InstantiateAsync(location, parent).Task as T); } } }
C#
복사
AddressablesController.cs
이 모노비헤이비어를 아무 게임오브젝트에 붙여야됨.
Example Assets가 이미 있으니 이걸 사용.
using System.Collections.Generic; using UnityEngine; public class AddressablesController : MonoBehaviour { [SerializeField] private string _label; private Transform _parent; private List<GameObject> _createdObjs { get; } = new List<GameObject>(); private void Start() { _parent = GameObject.Find("Example Assets").transform; Instantiate(); } private async void Instantiate() { await AddressablesLoader.InitAssets(_label, _createdObjs, _parent); } }
C#
복사
불러올 레이블 명시
8 specify-label-to-be-loaded
인스펙터의 Label 필드에 Prefabs 기입.
확인
9 check-out
Play 버튼 클릭 후 확인.
빌드
플레이 모드 스크립트
10 play-mode-script
플레이 모드에서 어드레서블을 사용하는데는 3가지 모드가 있음.
프로덕션 환경에서 동작하는지 확인하기 위해서는 Play Mode Script를 Use Existing Build (requires built groups) 로 변경.
어드레서블 빌드
11-1 build-addressables
11-2 files-built
빌드를 하기 위해 Build > New Build > Default Build Script 선택.
Assets\AddressableAssetsData\Windows 폴더 내에서 빌드된 파일을 찾을 수 있음.
확인
12 requires-build
Play 버튼을 클릭 후 확인.
빌드를 하지않았다면 위와 같은 에러 메세지 발생.
원격 빌드
빌드된 파일들은 서버에 저장하고 가져올 수 있음.
여기서는 AWS S3로 할것임.
이 가이드에서는 클라우드 서비스 설정은 다루지않을 것임.
필요하다면 이 레퍼런스를 참조할 것.
프로필 생성
13-1 manage-profiles
13-2 create-profile
13-3 set-active
Profile:Default > Manage Profiles 선택.
_Addressable Profiles_창에서 Create > Profile 선택.
생성된 프로필을 원하는 이름으로 변경.
생성된 프로필에서, RemoteLoadPath 값을 http://localhost에서 버킷 URL로 변경.
생성된 프로필 우클릭 후 Set Active 선택.
원격 카탈로그 활성화
14-1 inspect-system-settings
14-2 enable-remote-catalog
Tools > Inspect system Settings 선택.
인스펙터에서 Build Remote Catalog 체크.
Build Path를 RemoteBuildPath로 설정.
Load Path 역시 RemoteLoadPath로 설정.
원격 그룹 설정
15-1 inspect-group-settings
15-2 set-group-paths
Prefabs 그룹 우클릭 후 Inspect Group Settings 선택.
인스펙터에서 Build Path를 RemoteBuildPath로 설정.
Load Path 역시 RemoteLoadPath로 설정.
빌드
16 files-built-for-remote
로컬 빌드 했듯이 Build > New Build > Default Build Script 선택.
ServerData\StandaloneWindows 폴더 내에서 빌드된 파일들을 찾을 수 있음.
파일들은 .json.hash.bundle 세 가지.
업로드
17-1 errors-without-uploading
17-2 upload
17-3 grant-public-read
Unity가 원격 그룹을 서버에서 가져오려고 시도하기 때문에, 이 시점에서 플레이 모드에 진입시 에러가 발생함.
업로드를 합시다.
AWS 콘솔 S3 서비스에서 S3 버킷의 루트로 이동. StandaloneWindows 폴더를 버킷에 업로드.
Next 버튼을 눌러 Set permissons 섹션으로 가서 Manage public permissions를 Grant public read access to object(s) 로 변경.
Upload 버튼 클릭.
어셋 업데이트
변경
18 make-change
어셋에 아무거나 변화를 줌.
여기서는 페인트 통의 머테리얼을 바꿧음.
이전 빌드 업데이트
19-1 update-previous-build
19-2 select-bin-file
어셋 업데이트를 위해 Build > Update a Previous Build 선택.
Assets\AddressableAssetsData\Windows\ 폴더의 addressables_content_state.bin 파일 선택.
변경된 파일 업로드
20 upload-files-changed
변경된 파일들 (.json.hash.bundle)을 버킷의 StandaloneWindows 폴더로 업로드.
grant public read permissions 부여하는 걸 잊지말 것.
짜잔!
21 tada
이제 서버에서 (원격이 설정된) 어셋들을 저장하거나 불러올수 있음.
또한 어셋을 수정할 때마다 프로젝트를 새로 빌드할 필요가 없음.