비동기 로드
어드레서블 시스템 API는 비동기이며, 작업 진행 및 완료 현황을 관리하는 데 사용할 수 있는 AsyncOperationHandle
을 반환합니다.
어드레서블은 콘텐츠 위치에 구애받지 않도록 설계되었습니다. 콘텐츠를 먼저 다운로드하거나 시간이 오래 걸릴 수 있는 다른 방법을 사용해야 할 수 있습니다. 동기 실행을 적용하려면 동기식 어드레서블에서 자세한 내용을 참조하십시오.
에셋을 처음 로드할 때는 최소 한 프레임이 지난 후에 처리가 완료됩니다. 콘텐츠가 이미 로드된 경우 실행 시간은 아래 표시된 다양한 비동기 로드 옵션마다 다를 수 있습니다. 다음과 같이 로드가 완료될 때까지 기다릴 수 있습니다.
- 코루틴: 실행을 계속하기 전에 항상 최소 한 프레임만큼 지연시킵니다.
Completed
콜백: 콘텐츠가 아직 로드되지 않은 경우 최소 한 프레임, 그렇지 않은 경우 같은 프레임에서 콜백이 호출됩니다.AsyncOperationHandle.Task
대기: 콘텐츠가 아직 로드되지 않은 경우 최소 한 프레임, 그렇지 않은 경우 같은 프레임에서 실행이 계속됩니다.
using System.Collections;
using UnityEngine;
using UnityEngine.AddressableAssets;
using UnityEngine.ResourceManagement.AsyncOperations;
internal class AsynchronousLoading : MonoBehaviour
{
private string address = "tree";
private AsyncOperationHandle loadHandle;
// always minimum of 1 frame
IEnumerator LoadAssetCoroutine()
{
loadHandle = Addressables.LoadAssetAsync<GameObject>(address);
yield return loadHandle;
}
// minimum of 1 frame for new asset loads
// callback called in current frame for already loaded assets
void LoadAssetCallback()
{
loadHandle = Addressables.LoadAssetAsync<GameObject>(address);
loadHandle.Completed += h =>
{
// Loaded here
};
}
// minimum of 1 frame for new asset loads
// await completes in current frame for already loaded assets
async void LoadAssetWait()
{
loadHandle = Addressables.LoadAssetAsync<GameObject>(address);
await loadHandle.Task;
}
private void OnDestroy()
{
Addressables.Release(loadHandle);
}
}