Skip to content

Instantly share code, notes, and snippets.

@MeowKim
Last active December 15, 2023 09:45
Show Gist options
  • Save MeowKim/904087f7c2b372a5df72a0925add85d6 to your computer and use it in GitHub Desktop.
Save MeowKim/904087f7c2b372a5df72a0925add85d6 to your computer and use it in GitHub Desktop.
Unity Addressable Asset System 가이드

📝 개요

Unity Addressable Asset System 가이드.
샘플 코드는 여기를 확인.

본 가이드는 아래 언어들을 지원함.

최초 생성: 2020-07-06
마지막 업데이트: 2020-07-14

💿 설치

새 프로젝트 생성

1 create-new-project

간소하게 하기 위해, 모델을 직접 생성하지 않을 것임.
샘플 모델을 사용하기위해 Universal Render Pipeline 템플릿으로 프로젝트 생성.

어드레서블 패키지 설치

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 Set, Props 제거.

📜 스크립트

아래 두 클래스를 추가.

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);
		}
	}
}

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);
	}
}

불러올 레이블 명시

8 specify-label-to-be-loaded

인스펙터의 Label 필드에 Prefabs 기입.

확인

9 check-out

Play 버튼 클릭 후 확인.

🚧 빌드

플레이 모드 스크립트

10 play-mode-script

플레이 모드에서 어드레서블을 사용하는데는 3가지 모드가 있음.
프로덕션 환경에서 동작하는지 확인하기 위해서는 Play Mode ScriptUse 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 PathRemoteBuildPath로 설정.
Load Path 역시 RemoteLoadPath로 설정.

원격 그룹 설정

15-1 inspect-group-settings

15-2 set-group-paths

Prefabs 그룹 우클릭 후 Inspect Group Settings 선택.
인스펙터에서 Build PathRemoteBuildPath로 설정.
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 permissionsGrant 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

이제 서버에서 (원격이 설정된) 어셋들을 저장하거나 불러올수 있음.
또한 어셋을 수정할 때마다 프로젝트를 새로 빌드할 필요가 없음. 😄

👀 레퍼런스

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment