Unity Eğitim
Dersler
Forum Sınav Merkezi Premium 💎
C# Dersleri

Unity'de Coroutine'ler: Kodunuzu Zamanla Nasıl Çalıştırırsınız?

Paylaşan: Unity Eğitim 30 August 2025 4 dakika okuma 74 görüntülenme

Unity oyun geliştirmede, kodlarınızı belirli zaman aralıklarıyla veya belirli olaylara bağlı olarak çalıştırmanız gerekebilir. Bu noktada, Coroutine'ler devreye girer. Coroutine'ler, kodunuzun yürütülmesini zaman içinde kontrol etmenizi sağlayan özel fonksiyonlardır. Bu makalede, Unity'de Coroutine'lerin nasıl kullanılacağını adım adım öğreneceğiz.

Coroutine'ler Nedir?


Coroutine'ler, bir fonksiyonun yürütülmesini duraklatıp daha sonra tekrar devam ettirmenize olanak tanır. Normal fonksiyonlar, çağrıldıklarında baştan sona çalışır ve bitişlerine kadar kontrolü bırakmazlar. Coroutine'ler ise, yield return ifadesi kullanılarak, yürütülme sürecinde duraklatılabilir ve daha sonra tekrar kaldığı yerden devam edebilir. Bu, oyunlarınızda zamanlama, animasyonlar, bekletmeler ve daha birçok işlemi yönetmek için mükemmel bir araçtır.

Coroutine'lerin Avantajları



  • Zamanlama: Kodunuzu belirli zaman aralıklarıyla çalıştırmak için idealdir.

  • Animasyonlar: Animasyonları adım adım kontrol etmek için kullanılabilir.

  • Olay Temelli İşlemler: Belirli olaylar gerçekleştiğinde kod parçalarını çalıştırmak için uygundur.

  • Performans: Ağır işlemleri parçalara bölerek performansı artırmaya yardımcı olur.


Coroutine'leri Başlatma: StartCoroutine()


Bir Coroutine'i başlatmak için StartCoroutine() fonksiyonunu kullanırız. Bu fonksiyon, bir Coroutine fonksiyonuna bir referans alır ve onu çalıştırır. Coroutine fonksiyonları, IEnumerator tipinde olmalıdır.
IEnumerator MyCoroutine() {
Debug.Log("Coroutine başladı!");
yield return new WaitForSeconds(2f);
Debug.Log("2 saniye sonra çalıştı!");
yield return null;
Debug.Log("Bir sonraki frame'de çalıştı!");
yield break;
}

void Start() {
StartCoroutine(MyCoroutine());
}


Bu örnekte, MyCoroutine() adlı bir Coroutine fonksiyonu tanımladık. Bu fonksiyon, önce "Coroutine başladı!" mesajını yazdırır, sonra 2 saniye bekler (WaitForSeconds(2f)), ardından "2 saniye sonra çalıştı!" mesajını yazdırır. Son olarak, bir sonraki frame'de "Bir sonraki frame'de çalıştı!" mesajını yazdırır ve sonlanır (yield break).

Yield Return Deyimi


yield return ifadesi, Coroutine'in yürütülmesini duraklatmak için kullanılır. Ardından, belirtilen değere bağlı olarak, Coroutine ne zaman devam edeceğine karar verilir.

Sık Kullanılan Yield Return Değerleri



  • yield return null;: Bir sonraki frame'de devam eder.

  • yield return new WaitForSeconds(time);: Belirtilen time (saniye cinsinden) kadar bekler.

  • yield return new WaitForEndOfFrame();: Tüm frame işlemleri tamamlandıktan sonra devam eder.

  • yield return StartCoroutine(otherCoroutine);: Başka bir Coroutine tamamlandıktan sonra devam eder.

  • yield return www;: WWW işlemi tamamlandıktan sonra devam eder.


Coroutine'leri Durdurma: StopCoroutine()


Çalışan bir Coroutine'i durdurmak için StopCoroutine() fonksiyonunu kullanırız. Bu fonksiyon, Coroutine'in başlangıçta döndürdüğü referansı alır.
IEnumerator MyCoroutine() {
// ...
}

void Start() {
myCoroutine = StartCoroutine(MyCoroutine());
}

void StopMyCoroutine() {
StopCoroutine(myCoroutine);
}


Bu örnekte, myCoroutine değişkeni, StartCoroutine() fonksiyonunun döndürdüğü referansı tutar. StopMyCoroutine() fonksiyonu çağrıldığında, bu referans kullanılarak Coroutine durdurulur.

Örnek: Basit Animasyon


Bir GameObject'i zaman içinde hareket ettirmek için Coroutine'leri kullanabiliriz.
IEnumerator MoveObject(Transform obj, Vector3 targetPosition, float duration) {
Vector3 startPosition = obj.position;
float elapsedTime = 0f;

while (elapsedTime < duration) {
elapsedTime += Time.deltaTime;
float t = elapsedTime / duration;
obj.position = Vector3.Lerp(startPosition, targetPosition, t);
yield return null;
}

obj.position = targetPosition;
}


Bu örnekte, MoveObject() Coroutine'i, bir GameObject'i belirtilen konuma belirtilen sürede hareket ettirir. Vector3.Lerp() fonksiyonu, iki vektör arasında lineer interpolasyon yapar.

Sonuç


Coroutine'ler, Unity'de zamanlama ve olay tabanlı işlemler için güçlü bir araçtır. Bu makalede, Coroutine'lerin temel kullanımını ve bazı pratik örneklerini inceledik. Daha karmaşık uygulamalar için, farklı yield return değerlerini ve Coroutine'lerin kontrolünü daha derinlemesine incelemeniz önerilir.

 

🧠 Ders Sonu Değerlendirme Testi

Dersi tamamladıktan sonra bilgilerinizi test edin ve ekstra puanlar kazanın.

🔥 +50 XP Ödül
🔒

Sınava Katılmak İçin Giriş Yapın

Bu ders sonu testini çözebilmek, bilginizi test edip **+50 XP** kazanmak ve **Sınav Şampiyonu** rozetinin kilidini açmak için üye girişi yapmalısınız.

Yorumlar (0)

Yorum yazabilmek ve derslere katkıda bulunabilmek için giriş yapmalısınız.

İlk yorumu siz yapın!