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");
}| Özellik | Coroutine | async/await |
|---|---|---|
| Yaşam süresi | GameObject yok edilince veya devre dışı kalınca durur | Kendiliğinden durmaz, iptal için CancellationToken gerekir |
| Değer döndürme | Doğrudan döndüremez | Task<T> / Awaitable<T> ile döndürür |
| Hata yönetimi | try/catch yield ile sınırlı | Normal try/catch çalışır |
| Bellek | Her StartCoroutine küçük allocation yapar | UniTask/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.
İlgili Unity & C# soruları
- Unity'de Update, FixedUpdate ve LateUpdate arasındaki fark nedir?
- GetComponent çağrılarını neden önbelleğe almalısınız?
- Rigidbody, physics layer'lar ve raycast nasıl çalışır? FixedUpdate neden önemlidir?
- C# delegate, event ve UnityEvent arasındaki farklar nelerdir?
- Unity'de garbage collection neden frame düşüşüne yol açar? Update içinde allocation'dan nasıl kaçınırsınız?
- C#'ta struct ile class arasındaki fark nedir? Value type ve reference type oyunda neden önemlidir?
Bu konuda başka bir soru biliyor musun?
Mülakatta karşılaştığın soruları ekle, onaylandıktan sonra yayına alınsın.