Coroutine'lerde Döngüler
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 24 / 63.
İçinde yield return bulunan bir döngü birçok kare boyunca çalışır, çünkü her yineleme bir sonrakinden önce duraklar. WaitForSeconds ile döngü bir şeyi belirli aralıklarla tekrarlar. Bu siren 3 kez yanıp söner:
IEnumerator Flash()
{
for (int i = 0; i < 3; i++)
{
lamp.enabled = true;
yield return new WaitForSeconds(0.2f);
lamp.enabled = false;
yield return new WaitForSeconds(0.2f);
}
}yield return null ile döngü, koşulu sağlanana kadar her karede biraz ilerler; bir coroutine'in bir şeyi canlandırması bu şekilde olur. Ölçeği 1 olan bu balon, ölçeği 2'ye ulaşana kadar saniyede 0.5 büyür, ardından şunu bildirir:
IEnumerator Inflate()
{
while (transform.localScale.x < 2f)
{
transform.localScale += Vector3.one * 0.5f * Time.deltaTime;
yield return null;
}
Debug.Log("Full");
}Time.deltaTime burada Update() içindeki gibi çalışır: coroutine her karede bir kez devam eder ve döngüden sonraki satır yalnızca döngü tamamlandığında çalışır. yield olmadan tüm döngü tek bir kare içinde çalışır ve balon anında dolar. Her yinelemede yield ettiği sürece, coroutine içinde while (true) döngüsü kullanmak uygundur; yield etmezse kareyi asla geri vermez ve Unity editörü donar.
Görev
KolaySpace tuşu, kalenin Portcullis'inin Ride coroutine'ini başlatır. Kapının tam bir tur yapmasını sağlayacak şekilde Ride yaz:
height(3) birim yükselir; saniyedespeed(1.5) birim hızla ilerler, tam tepe noktasında durur veOpenmesajını kaydeder.- 1 saniye açık kalır.
- Aynı hızla başladığı yere (
down) geri iner veClosedmesajını kaydeder.
Play'e bas ve Space tuşuna bas, ardından Check'e bas.
Kendin dene
using System.Collections;
using UnityEngine;
public class Portcullis : MonoBehaviour
{
public float speed = 1.5f;
public float height = 3f;
Vector3 down;
void Start()
{
down = transform.position;
}
void Update()
{
if (Input.GetKeyDown(KeyCode.Space))
{
StartCoroutine(Ride());
}
}
IEnumerator Ride()
{
// speed hızında height birim yüksel ve Open değerini logla, 1 saniye bekle, tekrar aşağı in ve Closed değerini logla
yield return null;
}
}
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
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 Duvar