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 부여하는 걸 잊지말 것.
이제 서버에서 (원격이 설정된) 어셋들을 저장하거나 불러올수 있음.
또한 어셋을 수정할 때마다 프로젝트를 새로 빌드할 필요가 없음. 😄