Coroutine'lerde Döngüler
Coddy'nin Unity Journey'sinin Fizik ve Oynanış bölümünün bir parçası. Ders 25 / 71.
İç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 küçük bir işlem yapar; coroutine ile bir şeyin canlandırılması böyle gerçekleşir. Ö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 verdiği sürece coroutine içinde while (true) döngüsü kullanmak uygundur; yield olmadan kareyi asla geri vermez ve Unity düzenleyicisi donar.
Görev
KolayKapı kafesinin tam bir gidiş-dönüş yapması için Ride yaz.
Vector3 up = down + Vector3.up * height;ayarla.while (transform.position != up)koşulundaVector3.MoveTowards(transform.position, up, speed * Time.deltaTime)ile hareket et veyield return null;kullan.Openkaydını tut, ardındanyield return new WaitForSeconds(1f);kullan.- Aynı şekilde
downnoktasına geri dönmek için döngü kur, ardındanClosedkaydını tut.
“Oyna” düğmesine bas ve Space tuşuna bas: kapı yükselir, bekler ve kapanır. Ardından “Kontrol et” düğmesine 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 mesajını günlüğe yaz, 1 saniye bekle, sonra tekrar aşağı in ve Closed mesajını günlüğe yaz
yield return null;
}
}
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