2024.11.14 - [분류 전체보기] - 비동기 프로그래밍에 대해 알아보자. #2 (Task)
오늘은 지난 시간에 이어 UniTask에 대해 정리해 보고자 합니다.
UniTask
UniTask는 Unity 환경에서
비동기 프로그래밍을 더 효율적으로 할 수 있게 해주는 라이브러리입니다.
UniTask는 외부 라이브러리라
설치하기 위해선 몇 가지 과정을 거쳐야 합니다.
설치 방법
https://github.com/Cysharp/UniTask
설치하는 방법은 두 가지가 있습니다.
1)
사이트에 들어가서 우측에 Releases라 적힌 부분을 클릭하고
직접 다운로드 후 유니티에 추가하는 방법
2)
아래 내용을 쭉 보다 보면 UPM Packager라는 부분이 나오는데
여기서 제공하는 URL 주소를 유니티 패키지 매니저에 추가하는 방법
저는 2번 방식으로 실습 진행을 했고
여러분도 따라 하기 편하시라고 URL을 가져왔습니다.
유니티 내에서 Package Manager를 켠 후
+버튼의 Add package from git URL.. 클릭
아래 주소를 복사 붙여 넣기 하면 됩니다.
https://github.com/Cysharp/UniTask.git?path=src/UniTask/Assets/Plugins/UniTask
이렇게 하면 Unitask를 사용할 수 있습니다.
장점
구조체를 기반으로 제작되었기 때문에 GC가 없고,
메모리 할당이 최소화되어 최적화에 유리하다고 합니다.
*
window - UniTask Tracker를 통해
현재 활성화되어 있는 유니테스크 작업을 파악할 수 있습니다.
예시 코드
using Cysharp.Threading.Tasks;
public class Example : MonoBehaviour
{
// 비동기 메서드 선언
async UniTaskVoid Start()
{
// 3초 대기
await UniTask.Delay(3000);
// 다음 프레임까지 대기
await UniTask.Yield();
// 특정 조건이 만족될 때까지 대기
await UniTask.WaitUntil(() => condition);
}
// 취소 토큰 사용 예시
async UniTask LoadAssetAsync(CancellationToken cancellationToken)
{
try
{
var asset = await Resources.LoadAsync<GameObject>("Prefab");
await UniTask.Delay(1000, cancellationToken: cancellationToken);
}
catch (OperationCanceledException)
{
// 취소 처리
}
}
}
// 병렬 실행 가능
await UniTask.WhenAll(task1, task2, task3);
// 첫 번째 완료 대기
await UniTask.WhenAny(task1, task2, task3);
마무리
오늘은 간단하게 Unitask에 대해서 알아보았습니다.
찾아보니 DoTween이나 어드레서블과 연계하여 사용하기도 하는 것 같습니다.
추가로 깃허브 주소에 들어가서 직접 읽어보시면
awaitable과 비교 정리해 놓은 내용도 있더군요.
마침 다음 글로 awaitable을 다루려고 했는데
이때 비교하는 내용을 바탕으로 정리해 올리겠습니다.
어드레서블도 조만간 한번 다루려고 했었는데 다 이어지네요;;
(이전에 에셋번들 다루면서 다룬다고 하긴 했던거 같은데 그게 벌써 한달전이네요 ㄷㄷ)
2024.11.19 - [분류 전체보기] - 유니티 - 비동기 프로그래밍에 대해 알아보자. #4 (Awaitable)
참고한 자료
https://youtu.be/j3hpuVB2cLk?si=MyZPEvK4Cf8Qm4mQ