Unity'de coroutine ile async/await arasındaki fark nedir? Hangisini ne zaman kullanırsınız?

Cevap

Coroutine, IEnumerator döndüren ve yield ile kareler arasında duraklatılabilen bir metottur. Ayrı bir thread değildir; ana thread'de, Unity'nin oyun döngüsü tarafından her kare devam ettirilir.

IEnumerator FadeOut(CanvasGroup g)
{
    while (g.alpha > 0f)
    {
        g.alpha -= Time.deltaTime;
        yield return null;              // bir sonraki kareyi bekle
    }
}
StartCoroutine(FadeOut(group));

async/await C#'ın standart asenkron modelidir. Unity 2023.1+ sürümlerinde Awaitable tipi, öncesinde UniTask gibi kütüphaneler kullanılır.

async Awaitable LoadLevelAsync()
{
    await Awaitable.WaitForSecondsAsync(1f);
    await SceneManager.LoadSceneAsync("Level2");
}
ÖzellikCoroutineasync/await
Yaşam süresiGameObject yok edilince veya devre dışı kalınca dururKendiliğinden durmaz, iptal için CancellationToken gerekir
Değer döndürmeDoğrudan döndüremezTask<T> / Awaitable<T> ile döndürür
Hata yönetimitry/catch yield ile sınırlıNormal try/catch çalışır
BellekHer StartCoroutine küçük allocation yaparUniTask/Awaitable ile neredeyse sıfır

Ne zaman hangisi: Basit, nesneye bağlı zamanlamalar (animasyon, bekleme, efekt) için coroutine pratiktir. Ağ istekleri, dosya işlemleri, değer döndüren karmaşık akışlar için async/await daha okunur ve test edilebilirdir. async kullanırken nesne yok edildiğinde işlemi iptal etmeyi (destroyCancellationToken) unutmamak gerekir.

  1. Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?KolayUnity & C#Game Dev
  2. GetComponent çağrılarını neden önbelleğe almalısınız?KolayUnity & C#Game Dev
  3. Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?OrtaUnity & C#Game Dev
  4. C# delegate, event ve UnityEvent arasındaki farklar nelerdir?OrtaUnity & C#Game Dev
  5. Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?ZorUnity & C#Game Dev
  6. C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?OrtaUnity & C#Game Dev

Bu konuda başka bir soru biliyor musun?

Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.

Soru ekle