- 이 글은 github.com/Unity-Technologies/Addressables-Sample 소스코드를 정리한 글입니다.
Addressable Asset을 사용하는 가장 간단한 방법은 컴포넌트 레퍼런스에 에셋을 지정하는 방법입니다.
그 방법은 이전 글 Getting Started with Addressable Assets 을 참고해주세요
인스턴스화
	public AssetReference baseCube;
	public void SpawnThing()
	{
		baseCube.InstantiateAsync();
	}가장 기본이 되는 방식입니다.
public레퍼런스로 받아온 AssetReference를 필요할때 InstantiateAsync함수를 호출하면 에셋의 로드와 인스턴스화를 한번에 하게됩니다.
 void Start()
    {
        leftObject.LoadAssetAsync();
    }
    void FixedUpdate()
    {
       var leftGo = Instantiate(leftObject.Asset, leftPosition, Quaternion.identity) as GameObject;
    }
다른 방법으로 로드를 먼저한 후 필요한 시점에 인스턴스화를 하는 방법이 있습니다.
Note : 두 예제의 다른 점은 어드레서블 에셋은 ref-count를 사용하여 관리가 되어지는데
위에 예제는 인스턴스화가 될때마다 ref-count가 올라가게 됩니다.
아래 예제는 InstantiateAsync가 아닌 GameObject.Instantiate를 사용하였는데 이 경우에는 ref-count가 올라가지 않습니다
당연히 destroy될때도 ref-count가 줄어들지 않는다 즉 managed가 아니란것이죠.
로드 완료 체크.
다음으로 Addressable Asset은 모두 비동기로 로드를 하기때문에 로드가 완료될때 콜백을 받아 처리를 할 수 있습니다.
	void Start ()
	{
		m_ToLoadCount = shapes.Count;
		foreach (var shape in shapes)
		{
			shape.LoadAssetAsync<GameObject>().Completed += OnShapeLoaded;
		}
	}
	void OnShapeLoaded(AsyncOperationHandle<GameObject> obj)
	{
		m_ToLoadCount--;
		if (m_ToLoadCount <= 0)
			m_IsReady = true;
	}
	public void SpawnAThing()
	{
		if (m_IsReady && shapes[currentIndex].Asset != null)
		{
			for(int count = 0; count <= currentIndex; count++)
				GameObject.Instantiate(shapes[currentIndex].Asset);
			currentIndex++;
			if (currentIndex >= shapes.Count)
				currentIndex = 0;
		}
	}
위코드는 에셋을 로드하고 OnShapeLoadede 콜백을 Complete 액션에 추가하였다.
에셋의 로딩이 완료가 되면 OnShapeLoadede가 호출되며 AsyncOperationHandle을 인자로 받습니다.
여기서 로드가 완료된 에셋에 접근이 가능하며(.result) 추후 해제를 위해 저장해놓을 수 도 있습니다.
   void FixedUpdate()
    {
       if (leftObject.Asset != null)
       {
          ...
        }
     }에셋 로드를 확인하는 다른 방법은 폴링을 하는 것입니다.
레퍼런스로 가져온 AssetReference의 .Asset을 이용하여 해당 에셋이 로드가 된상태인지 확인이 가능합니다.
이상 Addressable Asset의 가장 기본적인 사용법을 정리해보았습니다.
'프로그램-잉 > Unity' 카테고리의 다른 글
| Addressable Memory Management (0) | 2021.02.26 | 
|---|---|
| Getting started with Addressable Assets (0) | 2021.02.20 | 
| Addressable Asset Overview (0) | 2021.02.20 | 
| Unity x LEGO Microgame 공모전 (0) | 2020.10.28 | 
| TimeScale - Coroutine (0) | 2020.10.16 | 
 
									
								 
									
								