Label로 로드하기
Cube와 Sphere 중 하나를 랜덤 생성하는 로직을 Label을 사용해 구현해보자.
Mange Labels를 눌러 Label을 추가한다.
Cube와 Sphere에 'MyLabel'을 달아주자.
사용할 필드는 위 두가지이다.
AssetLabelReference 필드는 라벨을 쉽게 고를 수 있도록 하는 자료형이다.
IList<IResourceLocation>은 '라벨'에 해당하는 에셋들의 경로들이다.
위 API를 통해 라벨을 인자로해서 에셋들의 경로인 IList<IResourceLocation>을 얻는다.
그리고 이 경로를 통해 게임오브젝트를 생성할 수 있다.
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
|
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
using UnityEngine.ResourceManagement.ResourceLocations;
public class LabelReferences : MonoBehaviour
{
// 어드레서블의 Label을 얻어올 수 있는 필드.
public AssetLabelReference assetLabel;
private IList<IResourceLocation> _locations;
// 생성된 게임오브젝트를 Destroy하기 위해 참조값을 캐싱한다.
private List<GameObject> _gameObjects = new List<GameObject>();
public void GetLocations()
{
// 빌드타겟의 경로를 가져온다.
// 경로이기 때문에 메모리에 에셋이 로드되진 않는다.
Addressables.LoadResourceLocationsAsync(assetLabel.labelString).Completed +=
(handle) =>
{
_locations = handle.Result;
};
}
public void Instantiate()
{
var location = _locations[Random.Range(0, _locations.Count)];
// 경로를 인자로 GameObject를 생성한다.
// 실제로 메모리에 GameObject가 로드된다.
Addressables.InstantiateAsync(location, Vector3.one, Quaternion.identity).Completed +=
(handle) =>
{
// 생성된 개체의 참조값 캐싱
_gameObjects.Add(handle.Result);
};
}
public void Release()
{
if (_gameObjects.Count == 0)
return;
var index = _gameObjects.Count - 1;
// InstantiateAsync <-> ReleaseInstance
// Destroy함수로써 ref count가 0이면 메모리 상의 에셋을 언로드한다.
Addressables.ReleaseInstance(_gameObjects[index]);
_gameObjects.RemoveAt(index);
}
}
|
Addressables.LoadResourceLocationsAsync는 에셋을 메모리에 로드하지 않고 경로만 추출하는 api다.
IList형태로 반환하기 때문에 해당 Label의 다수 에셋을 한번에 로드할 수 있다.
'Unity > 어드레서블 에셋 시스템' 카테고리의 다른 글
어드레서블 에셋 시스템 - 개념: 어드레서블 API 요약 & 정리 (10) | 2020.06.29 |
---|---|
어드레서블 에셋 시스템 - 개념: Remote 서버 연동 (0) | 2020.06.29 |
어드레서블 에셋 시스템 - 디버깅: 에셋 빌드 에러 DirectoryNotFoundException (0) | 2020.06.26 |
어드레서블 에셋 시스템 - 개념: 씬 로드 & 언로드, Component AssetReference (1) | 2020.06.24 |
어드레서블 에셋 시스템 - 개념: 에셋 로드와 생성 및 해제 (2) | 2020.06.24 |
댓글