İ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.
Görev
KolaySpace tuşuyla dikenli tuzağın bir korutin kullanarak fırlamasını sağla.
IEnumerator Spring()yaz:Clickmesajını günlüğe yazdır,yield return new WaitForSeconds(0.5f);ve ardındantransform.position += Vector3.up;kullan.- Sonra aynı şekilde 2 saniye bekle ve
Vector3.updeğerini tekrar çıkar. - Space tuşu için
ifkoş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
1Rigidbody
Yerçekimi ve KütleAddForce ile İtmeDürtüyle ZıplamaFizik için FixedUpdateHızKinematik CisimlerTekrar: Fırlatma Rampası4Coroutine'ler
ÇağırmaInvokeRepeating ve CancelInvokeİlk Coroutine'inizCoroutine'lerde DöngülerCoroutine'leri DurdurmaTekrar: Geri Sayım2Çarpışmalar
OnCollisionEnterNeye Çarptım?Çarpınca KırılYerde DurmakSekme ve SürtünmeCollider ŞekilleriTekrar: Kırılabilir DuvarKendi başına pratik yap: Unity playground