UniTask 바로가기
https://github.com/Cysharp/UniTask
GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.
Provides an efficient allocation free async/await integration for Unity. - GitHub - Cysharp/UniTask: Provides an efficient allocation free async/await integration for Unity.
github.com
UniTask 란?
UniTask는 Unity용 async-await 통합 패키지 입니다.
C#의 Task, async-await를 Unity에 맞게 더 최적화 하고 유니티에서 사용하기 편하도록 만든 기능입니다.
Unity 코루틴의 단점 :
서버로 부터 받은 값을 IEnumrator 함수에서 return 할 수가 없습니다.
그리고 StartCoroutine을 사용할 때 마다 GC 할당량이 높은 편 입니다. 특히 yield return new를 사용할 때, new로 인한 할당이 지속적으로 발생합니다.
UniTask의 장점 :
Struct 기반으로 제작되어 있어서 Zero Allocation이 특징입니다.
서버로 부터 받은 값을 return 할 수 있습니다.
자체적으로 UniTask.Yeild, UniTask.Delay, UniTask.DelayFrame 처럼 코루틴과 유사한 기능을 제공합니다.
메모리 누수를 방지하기 위한 TaskTracker 창을 지원합니다.
UniTask 설치 :
1. Release 부분에 최신버전을 클릭하여 설치합니다.
2. Table of Contents > UPM Package로 이동하여 Package Manager에서 http:~~ 부분을 복사하여 추가합니다.
UniTask 테스트 :
스크립트 요점 :
1. 코루틴과 유니테스크는 비슷하게 작용합니다.
2. 유니테스크에서 Timescale 값을 무시하는 방법은 DelayType.UnscaledDeltaTime을 사용하면 됩니다.
3. DelayType.UnscaledDeltaTime을 사용하게 되면 Timescale 값이 0이 되어도 계속 진행합니다.
4. Void를 쓰게되면 .Forget(); 을 붙여줘야 합니다.
5. 특정 수가 되면 멈추는 함수를 작성하는 방법은 WaitUtil로 코루틴과 유사합니다.
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cysharp.Threading.Tasks; // UniTask를 쓰기위해서 필요합니다.
using System; // TimeSpan을 쓰기위해서 필요합니다.
public class UniTaskTest : MonoBehaviour
{
private IEnumerator CoTest()
{
yield return new WaitForSeconds(1f);
Debug.Log("Co 1초지남");
}
private async UniTaskVoid TaskTest()
{
//DelayType.UnscaledDeltaTime Timescale 값이 0이 되어도 계속 진행합니다.
await UniTask.Delay(TimeSpan.FromSeconds(1f), DelayType.UnscaledDeltaTime);
Debug.Log("Task 1초지남");
}
private void Start()
{
Time.timeScale = 0;
StartCoroutine(CoTest());
// Void를 사용하면 Forget을 붙이라고 문서에 나와있습니다.
TaskTest().Forget();
}
using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Cysharp.Threading.Tasks;
using System;
public class UniTaskTest : MonoBehaviour
{
public int count;
private IEnumerator CoTest()
{
yield return new WaitUntil(() => count == 3);
Debug.Log("Co 3이 되었다.");
}
private async UniTaskVoid TaskTest()
{
await UniTask.WaitUntil(() => count == 3);
Debug.Log("Task 3이 되었다.");
}
private void Start()
{
TaskTest().Forget();
}
}
Dotween과도 호환가능 합니다.
더 많은 정보는 여기서 확인하시면 됩니다. (허락해주신 용쌤 감사합니다.)
영상출처 :
더 많은 설명 :
https://docs.google.com/file/d/1Wdu5SnqPYEVDGaHJ0Mefam5Ig9iGQhv-/view
UniTask.pptx
docs.google.com
'C++,C# > 공부' 카테고리의 다른 글
[공부] TCP/IP 공부 1 (스택의 계층 구조) (0) | 2023.01.20 |
---|---|
[C# 공부] 면접에 자주 묻는 기본 질문 (0) | 2023.01.16 |
[C# 공부] 각종 유용한 사이트 모음 (0) | 2023.01.12 |
댓글