Menu
CoddyTech

İlk Coroutine'iniz

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

Update() her karede tamamlanmalıdır, bu yüzden bekleyemez. Bir eş yordam bekleyebilir: duraklayan ve daha sonra kaldığı yerden devam eden bir yöntemdir. IEnumerator döndürür; bunun için using System.Collections; gerekir ve içindeki her yield return bir duraklamadır. C#'ta yield return, değerlerini teker teker veren bir yöntem oluşturur; bekleme bittiğinde Unity bir sonrakini 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 noktasına kadar hemen çalıştırır, ardından Start() devam eder; Unity her beklemeden sonra eş yordamı yerel değişkenleri oldukları gibi koruyarak yeniden başlatır. StartCoroutine olmadan tek başına kullanılan Cycle(); hiçbir şey yapmaz: duraklatılmış yöntemi oluşturur ve sonra atar; yöntemin tek bir satırı bile çalışmaz. Ayrıca yield return 3f; 3 saniye bekletmez: Unity yalnızca WaitForSeconds gibi bekleme nesnelerini tanır ve diğer tüm değerleri bir kare olarak değerlendirir.

challenge icon

Görev

Kolay

Dikenler zeminin altında bekliyor. Space tuşuyla tuzağı, adı Spring olan bir eş yordam kullanarak fırlat:

  • Hemen: Click günlüğe yazdırılsın.
  • Yarım saniye sonra: dikenler 1 birim yukarı sıçrasın.
  • 2 saniye sonra: tekrar 1 birim aşağı insinler.

Oynat'a bas, Space'e basıp izle, ardından Kontrol Et'e bas.

Kendin dene

using System.Collections;
using UnityEngine;

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

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

Bu ders kısa bir quiz içerir. Soruları yanıtlamak ve ilerlemeni kaydetmek için derse başla.

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