Sử dụng UniTask thay thế Coroutine
C# Code
// Yêu cầu: Cài đặt thư viện UniTask từ GitHub hoặc Package Manager (OpenUPM)
// https://github.com/Cysharp/UniTask
using UnityEngine;
using Cysharp.Threading.Tasks;
using System;
public class UniTaskExample : MonoBehaviour
{
async void Start()
{
Debug.Log("Bắt đầu chờ bằng UniTask...");
// Thay thế cho 'yield return new WaitForSeconds(3f);'
await UniTask.Delay(TimeSpan.FromSeconds(3));
Debug.Log("Đã 3 giây trôi qua! Quá dễ dàng.");
// Thực hiện một hành động khác
await ChangeColorAfterDelay(Color.cyan, 2f);
Debug.Log("Đã đổi màu xong.");
}
private async UniTask ChangeColorAfterDelay(Color color, float delay)
{
await UniTask.Delay(TimeSpan.FromSeconds(delay));
// Kiểm tra nếu đối tượng đã bị hủy trong khi chờ
if (this.GetCancellationTokenOnDestroy().IsCancellationRequested)
{
return;
}
GetComponent<Renderer>().material.color = color;
Debug.Log("Đã đổi màu thành công!");
}
}Ví dụ về cách dùng UniTask để viết code bất đồng bộ một cách gọn gàng và hiệu quả hơn Coroutine, với hỗ trợ async/await đầy đủ và không cần MonoBehaviour.