티스토리 뷰
반응형
[unity/UniTask] UniTask를 활용하여, 백그라운드에서 리소스 로드하는 방법
일반적으로 async/await를 통하여 비동기 처리를 처리를 하는데,
gameobject/texture등 항상 메인쓰레드에서 돌아야하기때문에 비동기처리가 쉽지않다
UniTask를 활용하여 쉽게 해보도록하자
#UniTask
UniTask는 유니티용 async-await 통합패키지이다
https://github.com/Cysharp/UniTask
#UniTask에 관해 참고하면 좋은 블로그
https://velog.io/@jinuku/UniTask-%EC%95%8C%EC%95%84%EB%B3%B4%EA%B8%B0
#리소스 로드할 UnjTask 기반의 함수
private async UniTask<Texture2D> GetImageAsync(string path)
{
UnityWebRequest www = UnityWebRequestTexture.GetTexture("file://" + path);
await www.SendWebRequest();
if (www.isNetworkError || www.isHttpError) throw new Exception(www.error);
return ((DownloadHandlerTexture)www.downloadHandler).texture;
}
#테스트 비동기 함수
약 100장의 리소스를 동시에 5번 로드해보자
async
Task
LoadImage1(int idx)
{
for (int i = idx; i < (idx+100); i++)
{
var texture = await GetImageAsync(@"c:\a\" + i.ToString("00000") + ".jpg");
SequenceList1.Add(texture);
}
Debug.Log("200장 로드 완료 1번:" + DateTime.Now);
Debug.Log("1번:" + SequenceList1.Count);
}
void Update()
{
if (Input.GetKeyUp("1"))
{
Debug.Log("함께시작:"+DateTime.Now);
_ = LoadImage1(1);
_ = LoadImage2(1001);
_ = LoadImage3(2001);
_ = LoadImage4(3001);
_ = LoadImage5(4001);
}
}
3초동안 500장로드를 비동기로 처리하였다
#UniTask #비동기 #async #await #이미지 #시퀀스
반응형
'유니티(unity)' 카테고리의 다른 글
[unity/유니티] 이미지 시퀀스 드래그 구현 (0) | 2022.12.09 |
---|---|
[c#/unity] timeline을 이용한 이미지 시퀀스 구현(with c# 컨트롤) (0) | 2022.11.17 |
[arpro/unity] avpro 기본 재생 하는 방법 (0) | 2022.11.04 |
[unity/android] 유니티에서 export한 안드로이드 프로젝트 스플레쉬 스크린 없애기(Android 12버전) (0) | 2022.09.02 |
[videoplayer/unity]유니티에서 비디오 플레이 시 전 영상 잠깐(깜빡/잔상) 보일때 (0) | 2022.08.29 |
댓글
반응형