안녕하세요!
이번에 포스팅할 내용은 비동기 코드를 짤 때 자주 사용하는 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 |