Menu
CoddyTech

İlk Coroutine'iniz

Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 24 / 71.

Update() her karede tamamlanmalıdır, bu yüzden bekleyemez. Bir eş yordam bekleyebilir: duraklatıp daha sonra kaldığı yerden devam eden bir metottur. IEnumerator döndürür; bunun için using System.Collections; gerekir ve içindeki her yield return bir duraklamadır. C# dilinde yield return, değerlerini teker teker veren bir metot oluşturur; bekleme sona erdiğinde Unity bir sonraki değeri ister. yield return null bir kare bekler, yield return new WaitForSeconds(3f) ise 3 saniye bekler.

StartCoroutine(Cycle()) bir eş yordamı başlatır. Bu trafik ışığı yeşile döner, 3 saniye sonra sarıya ve bir saniye daha geçince kırmızıya döner:

using System.Collections;
using UnityEngine;

public class TrafficLight : MonoBehaviour
{
    Renderer lamp;

    void Start()
    {
        lamp = GetComponent<Renderer>();
        StartCoroutine(Cycle());
    }

    IEnumerator Cycle()
    {
        lamp.material.color = Color.green;
        yield return new WaitForSeconds(3f);
        lamp.material.color = Color.yellow;
        yield return new WaitForSeconds(1f);
        lamp.material.color = Color.red;
    }
}

StartCoroutine eş yordamı ilk yield ifadesine kadar hemen çalıştırır, ardından Start() devam eder; Unity her beklemeden sonra, yerel değişkenleri olduğu gibi koruyarak eş yordamı sürdürür. StartCoroutine olmadan tek başına kullanılan Cycle(); hiçbir şey yapmaz: duraklatılmış metodu oluşturup bırakır ve metodun tek bir satırı bile çalışmaz. Ayrıca yield return 3f; 3 saniye beklemez: Unity yalnızca WaitForSeconds gibi bekleme nesnelerini tanır ve diğer tüm değerleri bir kare olarak ele alır.

challenge icon

Görev

Kolay

Space tuşuyla dikenli tuzağın bir korutin kullanarak fırlamasını sağla.

  1. IEnumerator Spring() yaz: Click mesajını günlüğe yazdır, yield return new WaitForSeconds(0.5f); ve ardından transform.position += Vector3.up; kullan.
  2. Sonra aynı şekilde 2 saniye bekle ve Vector3.up değerini tekrar çıkar.
  3. Space tuşu için if koşulunda, StartCoroutine(Spring()); ile başlat.

“Oyna” düğmesine bas ve Space tuşuna bas: dikenler yukarı fırlar, sonra aşağı iner. Ardından “Kontrol et” düğmesine bas.

Kendin dene

using System.Collections;
using UnityEngine;

public class SpikeTrap : MonoBehaviour
{
    void Update()
    {
        if (Input.GetKeyDown(KeyCode.Space))
        {
            // Tuzağı bir coroutine ile tetikle
        }
    }

    // IEnumerator Spring(): Tıkla, 0.5 s bekle, 1 birim yukarı çık, 2 s bekle, 1 birim aşağı in
}

Fizik ve Oynanış bölümündeki tüm dersler

Kendi başına pratik yap: Unity playground