Unity Addressable Asset System 가이드.
샘플 코드는 여기를 확인.
본 가이드는 아래 언어들을 지원함.
최초 생성: 2020-07-06
마지막 업데이트: 2020-07-14
간소하게 하기 위해, 모델을 직접 생성하지 않을 것임.
샘플 모델을 사용하기위해 Universal Render Pipeline 템플릿으로 프로젝트 생성.
Windows > Package Manager 선택.
Addressables 검색 후 설치.
Windows > Asset Management > Addressables > Groups 선택.
Create Addressables Settings 클릭.
Assets\ExampleAssets 폴더처럼 Materials, Models, Prefabs, Shaders, Textures 로 분류.
_Addressable Groups_창에서 Create > Group > Packed Assets 선택 후 이름 변경.
어셋들을 Assets\ExampleAssets 폴더에서 _Addressable Groups_창의 적절한 그룹으로 이동.
이름을 간략화하기 위해 어셋들을 선택한 후 우클릭 Simplify Addressable Names 선택.
Tools > Labels 선택.
이전 단계에서 생성했던 그룹에 따라 레이블 생성.
각각의 어드레서블에 적절한 레이블 추가.
씬에서 Example Assets 게임오브젝트 아래의 Workshop Set, Props 제거.
아래 두 클래스를 추가.
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);
}
}
}이 모노비헤이비어를 아무 게임오브젝트에 붙여야됨.
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);
}
}인스펙터의 Label 필드에 Prefabs 기입.
Play 버튼 클릭 후 확인.
플레이 모드에서 어드레서블을 사용하는데는 3가지 모드가 있음.
프로덕션 환경에서 동작하는지 확인하기 위해서는 Play Mode Script를 Use Existing Build (requires built groups) 로 변경.
빌드를 하기 위해 Build > New Build > Default Build Script 선택.
Assets\AddressableAssetsData\Windows 폴더 내에서 빌드된 파일을 찾을 수 있음.
Play 버튼을 클릭 후 확인.
빌드를 하지않았다면 위와 같은 에러 메세지 발생.
빌드된 파일들은 서버에 저장하고 가져올 수 있음.
여기서는 AWS S3로 할것임.
이 가이드에서는 클라우드 서비스 설정은 다루지않을 것임.
필요하다면 이 레퍼런스를 참조할 것.
Profile:Default > Manage Profiles 선택.
_Addressable Profiles_창에서 Create > Profile 선택.
생성된 프로필을 원하는 이름으로 변경.
생성된 프로필에서, RemoteLoadPath 값을 http://localhost에서 버킷 URL로 변경.
생성된 프로필 우클릭 후 Set Active 선택.
Tools > Inspect system Settings 선택.
인스펙터에서 Build Remote Catalog 체크.
Build Path를 RemoteBuildPath로 설정.
Load Path 역시 RemoteLoadPath로 설정.
Prefabs 그룹 우클릭 후 Inspect Group Settings 선택.
인스펙터에서 Build Path를 RemoteBuildPath로 설정.
Load Path 역시 RemoteLoadPath로 설정.
로컬 빌드 했듯이 Build > New Build > Default Build Script 선택.
ServerData\StandaloneWindows 폴더 내에서 빌드된 파일들을 찾을 수 있음.
파일들은 .json, .hash, .bundle 세 가지.
Unity가 원격 그룹을 서버에서 가져오려고 시도하기 때문에, 이 시점에서 플레이 모드에 진입시 에러가 발생함.
업로드를 합시다.
AWS 콘솔 S3 서비스에서 S3 버킷의 루트로 이동.
StandaloneWindows 폴더를 버킷에 업로드.
Next 버튼을 눌러 Set permissons 섹션으로 가서 Manage public permissions를 Grant public read access to object(s) 로 변경.
Upload 버튼 클릭.
어셋에 아무거나 변화를 줌.
여기서는 페인트 통의 머테리얼을 바꿧음.
어셋 업데이트를 위해 Build > Update a Previous Build 선택.
Assets\AddressableAssetsData\Windows\ 폴더의 addressables_content_state.bin 파일 선택.
변경된 파일들 (.json, .hash, .bundle)을 버킷의 StandaloneWindows 폴더로 업로드.
grant public read permissions 부여하는 걸 잊지말 것.
이제 서버에서 (원격이 설정된) 어셋들을 저장하거나 불러올수 있음.
또한 어셋을 수정할 때마다 프로젝트를 새로 빌드할 필요가 없음. 😄
































