Unity

어드레서블 어셋 시스템에서 어브레서블 그룹에 등록된 어셋은 코드에서 3가지 방법으로 인스턴싱 할 수 있다.

myroad 2023. 5. 12. 15:30

어드레서블 그룹에 등록된 어셋을 인스턴싱하는 3가지 방법

1.어셋의 이름으로 인스턴싱

  • 어드레서블 그룹에 등록된 어셋은 코드에서 그냥 해당 어셋의 이름을 그대로 사용해도 어드레서블이 자동적으로 찾아서 해당 어셋을 인스턴싱해 준다. 즉 어셋의 이름이 Cube라면 그냥 Cube 문자열을 사용해서 인스턴싱할 수 있다. 다만 주의할 점이 있다. 어셋을 어드레서블 그룹에 드래그 앤 드롭을 했다면 그대로 경로명이 이름으로 설정되므로 긴 경로명을 그대로 사용할 게 아니라면 이름을 설정해 주어야 한다.

IEnumerator InstantiateAsset(string asset)
{
	var async = Addressables.LoadAssetAsync<GameObject>(asset);
	yield return async;
	GameObject go = Instantiate(async.Result);
	SetLoadAsset(async, new GameObject[] { go });
}


2.어셋에 설정된 라벨 이름으로 인스턴싱

IEnumerator InstantiateLabel(string label)
{
    List<GameObject> golist = new List<GameObject>();
    AsyncOperationHandle<IList<GameObject>> async = Addressables.LoadAssetsAsync<GameObject>(label, null);
    yield return async;

    for (int i = 0; i < async.Result.Count; i++)
    {
        golist.Add(Instantiate(async.Result[i]));
    }
    //SetLoadAsset(null, golist.ToArray());
}


3.오브젝트에 설정된 AssetReference 참조을 통한 인스턴싱

IEnumerator InstantiateAsset(AssetReference asset)
{
    AsyncOperationHandle<GameObject> async = asset.LoadAssetAsync<GameObject>();
    yield return async;
    GameObject go = Instantiate(async.Result);
    SetLoadAsset(async, new GameObject[] { go });
}

 

출처 - https://github.com/Wenrong274/Unity-Addressable