MonoBehaviour.StartCoroutine
Deklarasyon
public Coroutine StartCoroutine(IEnumerator routine);
Açıklama
Bir Coroutine başlatır.
Bir coroutine'nin yürütülmesi, yield ifadesi kullanılarak herhangi bir noktada duraklatılabilir. Bir yield ifadesi kullanıldığında, coroutine yürütmeyi duraklatır ve otomatik olarak bir sonraki karede devam eder. Daha fazla ayrıntı için Coroutine'ler belgesine bakın.
Coroutine'ler, birkaç kare boyunca davranışı modellemek için mükemmeldir. StartCoroutine metodu, ilk yield return ifadesinde döner, ancak sonucu yield edebilirsiniz, bu da coroutine tamamlanana kadar bekler. Coroutine'lerin başladıkları sırayla bitmeleri garanti edilmez, aynı karede bitirseler bile.
Herhangi bir türde yield, null dahil, yürütmenin daha sonraki bir karede geri gelmesine neden olur, coroutine durdurulmadıkça veya tamamlanmadıkça.
Not: Bir coroutine'i MonoBehaviour.StopCoroutine ve MonoBehaviour.StopAllCoroutines kullanarak durdurabilirsiniz. Coroutine'ler, MonoBehaviour yok edildiğinde veya MonoBehaviour'un iliştirildiği GameObject devre dışı bırakıldığında da durdurulur. Coroutine'ler, bir MonoBehaviour devre dışı bırakıldığında durdurulmaz.
Ayrıca bakınız: Coroutine, YieldInstruction
Örnek bir StartCoroutine kullanımı:
using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour {
// Bu örnekte bir coroutine'i nasıl başlatacağımızı ve // fonksiyonu paralel olarak yürütmeye devam edeceğimizi gösteriyoruz. private IEnumerator coroutine;
void Start() { // - 0 saniye sonra, "Başlıyor 0.0" yazdırır // - 0 saniye sonra, "WaitAndPrint bitmeden önce 0.0" yazdırır // - 2 saniye sonra, "WaitAndPrint 2.0" yazdırır print("Starting " + Time.time); // WaitAndPrint fonksiyonunu bir coroutine olarak başlat. coroutine = WaitAndPrint(2.0f); StartCoroutine(coroutine); print("Before WaitAndPrint Finishes " + Time.time); } // her 2 saniyede bir print() fonksiyonunu çalıştır
private IEnumerator WaitAndPrint(float waitTime) { while (true) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } } }
Başka bir örnek:
// Bu örnekte bir coroutine'i nasıl başlatacağımızı ve tamamlanana kadar bekleyeceğimizi // gösteriyoruz using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { IEnumerator Start() { // - 0 saniye sonra, "Başlıyor 0.0" yazdırır // - 2 saniye sonra, "WaitAndPrint 2.0" yazdırır // - 2 saniye sonra, "Bitti 2.0" yazdırır print("Starting " + Time.time); // WaitAndPrint fonksiyonunu bir coroutine olarak başlat. Ve tamamlanana kadar bekle.
// yield return WaitAndPrint(2.0f); ile aynı yield return StartCoroutine(WaitAndPrint(2.0f)); print("Done " + Time.time); } // yürütmeyi waitTime saniye durdur IEnumerator WaitAndPrint(float waitTime) { yield return new WaitForSeconds(waitTime); print("WaitAndPrint " + Time.time); } }
Deklarasyon
public Coroutine StartCoroutine(string methodName, object value = null);
Açıklama
methodName adlı bir coroutine'i başlatır.
Çoğu durumda yukarıdaki StartCoroutine varyasyonunu kullanmak istersiniz. Ancak, bir string metod adı kullanarak StartCoroutine, belirli bir metod adıyla StopCoroutine kullanmanıza olanak tanır. Dezavantajı, string sürümünün coroutine'i başlatmak için daha yüksek bir çalışma zamanı yüküne sahip olması ve yalnızca bir parametre geçirebilmenizdir.
// Bu örnekte bir coroutine'i bir string adı kullanarak nasıl başlatacağımızı ve // durduracağımızı gösteriyoruz. using UnityEngine; using System.Collections; public class ExampleClass : MonoBehaviour { IEnumerator Start() { StartCoroutine("DoSomething", 2.0f); yield return new WaitForSeconds(1); StopCoroutine("DoSomething"); } IEnumerator DoSomething(float someParameter) { while (true) { print("DoSomething Loop"); // Bu coroutine'nin yürütülmesini durdur ve bir sonraki kareye kadar ana // döngüye dön
yield return null; } } }
Bir coroutine başka bir coroutine'i başlatabilir. Bu iki coroutine birçok şekilde birlikte çalışabilir. Bu, her iki coroutine'nin paralel çalışmasını içerir. Alternatif olarak, bir coroutine diğerini durdurabilirken kendisi devam edebilir. Aşağıdaki örnek, bir coroutine'nin başka bir coroutine'i başlatırken durakladığını gösterir. İkinci coroutine bittiğinde, birincisini yeniden başlatır.
using System.Collections; using System.Collections.Generic; using UnityEngine; public class ExampleClass : MonoBehaviour { void Start() { StartCoroutine(coroutineA()); } IEnumerator coroutineA() { // 1 saniye bekle Debug.Log("coroutineA created"); yield return new WaitForSeconds(1.0f); yield return StartCoroutine(coroutineB()); Debug.Log("coroutineA running again"); } IEnumerator coroutineB() { Debug.Log("coroutineB created");
yield return new WaitForSeconds(2.5f); Debug.Log("coroutineB enables coroutineA to run"); } }
Bu blog Unity Docs'un Türkçeye çevrilmiş halidir.
Yorumlar
Yorum Gönder