소소한 정보

Unity UniTask 사용법

소소한 개발 2023. 7. 8. 14:49

안녕하세요!

이번에 포스팅할 내용은 비동기 코드를 짤 때 자주 사용하는 UniTask 입니다.

 

유니티 메인 쓰레드 기반으로 작업하여 코루틴을 대체할 수 있습니다.

코루틴과 UniTask 코드 비교입니다. (같은 기능)

  UniTask Coroutine
1 await UniTask.Yield();
await UniTask.NextFrame();
yield return null
2 await UniTask.Delay(1000); yield return new WaitForSeconds(1)
3 await UniTask.WaitForEndOfFrame(); yield return new WaitForEndOfFrame
4 await UniTask.WaitForFixedUpdate();
yield return new WaitForFixedUpdate

 

1. 매 프레임 실행하는 코드

private async UniTask TestCode()
{
    while (true)
    {
        await UniTask.Yield();
    }
}

 

 

2.UniTask를 사용하면 오브젝트를 Destory하거나 Disable해도 계속 실행 되고 있습니다.

  •  Destroy는 따로 새로 토큰을 생성 할 필요없이 this.GetCancellationTokenOnDestroy() 대체 가능 합니다.
private async UniTask TestCode()
{
    while (true)
    {
        await UniTask.Yield(cancellationToken:this.GetCancellationTokenOnDestroy());
    }
}
  • Disable할 때는 토큰을 생성한 후 해제시켜주셔야 합니다.
private CancellationTokenSource cancelToken = null;

private void Start()
{
    cancelToken = new CancellationTokenSource();
    TestCode(cancelToken.Token);
}

private async UniTask TestCode(CancellationToken token)
{
    while (true)
    {
        await UniTask.Yield(cancellationToken: token);
    }
}

private void OnDisable()
{
    cancelToken.Cancel();
}

 

3. 1초 뒤 실행 코드

private async UniTask TestCode()
{
    await UniTask.Delay(1000);
}

 

 

4. UniTask는 코루틴과 다르게 리턴 값을 받을 수 있습니다.

private async UniTask<float> TestCode()
{
    await UniTask.Delay(1000);
    return 1f;
}

 

반응형

'소소한 정보' 카테고리의 다른 글

Unity 날짜 계산  (0) 2023.07.02
Unity 하위 전체 이미지 Alpha값 변경  (0) 2023.07.02
Unity Mathf의 올림,반올림,내림!  (1) 2023.07.02