[Unity] UniTask

강상훈·2023년 2월 12일
0

Unity

목록 보기
4/11

UniTask?

  • 유니티의 코루틴과 비슷한 역할(대체)
  • 코루틴은 예외처리x, 리턴 불가능

Installation

Github

  • com으로 설치하거나
  • release 패키지 다운로드.

Namespace

using Cysharp.Threading.Tasks;

Example

  1. 딜레이
WaitNSeconds(5, Test1.LogSomething).Forget();

private async UniTaskVoid WaitNSeconds(int n, Action action) {
    await UniTask.Delay(TimeSpan.FromSeconds(n), cancellationToken: this.GetCancellationTokenOnDestroy());
    action();
}
  1. 특정 조건 만족
private async UniTaskVoid WaitConditon(TestClass testClass) {
    await UniTask.WaitUntil(() => testClass.isWaited == true);
    Debug.Log("Wait Done..");
}
  • Async에서는 ref, out 사용 안됨 -> 인스턴스 자체를 전달해서 불변수 수정함.
  1. 특정 함수 실행 완료 대기
private async UniTaskVoid WaitFuntionDone() {
    await UniTask.WaitUntil(IsConditoned);
    Debug.Log(2);
}

bool IsConditoned() {
    Debug.Log(1);
    return true;
}
  • 선행 함수의 반환 값을 bool 형태로 반환
  1. 반복 실행
private async UniTaskVoid CallForNSeconds(int duration) {
	while (true) {
	    await UniTask.Delay(TimeSpan.FromSeconds(duration));
        Debug.Log("Tick");
    }
}
  • 코루틴과 동일한 방법으로 호출
  1. 취소
private CancellationTokenSource _source = new();

await UniTask.Delay(TimeSpan.FromSeconds((double)0.5f), cancellationToken: _source.Token);
...

//취소하기
_source.Cancel();
  • 토큰을 취소하면 다시 비동기 함수를 호출해도 동작하지 않는다.
  • 토큰을 재생성해서 호출
profile
https://totohoon01.tistory.com/

0개의 댓글