Menu
CoddyTech

InvokeRepeating ve CancelInvoke

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

InvokeRepeating(nameof(Blink), 0.5f, 0.5f), ilk kez 0.5 saniye sonra Blink işlevini çağırır, ardından iptal edilene kadar her 0.5 saniyede bir yeniden çağırır. İlk sayı ilk çağrıdan önceki gecikme süresini, ikinci sayı ise çağrılar arasındaki süreyi belirtir. CancelInvoke(nameof(Blink)) bunu durdurur; isim belirtilmeden kullanılan CancelInvoke() ise betiğin zamanladığı tüm Invoke çağrılarını durdurur.

Bu uyarı lambası Space tuşuna basılana kadar yanıp söner, ardından yanık kalır:

Light lamp;

void Start()
{
    lamp = GetComponent<Light>();
    InvokeRepeating(nameof(Blink), 0.5f, 0.5f);
}

void Blink()
{
    lamp.enabled = !lamp.enabled;
}

void Update()
{
    if (Input.GetKeyDown(KeyCode.Space))
    {
        CancelInvoke(nameof(Blink));
        lamp.enabled = true;
    }
}

Nesne oluşturma bölümündeki zamanlayıcı, bir float alanı ve Update() içinde bir denetim kullanarak aynı işi yapabilirdi. InvokeRepeating kullanıldığında Unity zamanı takip eder ve çağrıları yapar. InvokeRepeating çağrısı Start() içine yazılır: Update() içine yazılsaydı her karede bir tekrarlama çağrısı daha zamanlardı.

challenge icon

Görev

Kolay

Geyser, üzerindeki topu havaya fırlatır. Betiğinde ball, power ve bir eruptions sayacı bulunur. Düzenli aralıklarla püskürmesini sağla:

  • İlk püskürme, Play'e bastıktan 1 saniye sonra gerçekleşir; ardından her 2 saniyede bir püskürür.
  • Püskürme, adı Erupt olan bir yöntemdir: eruptions değerini 1 artırır, ball.AddForce(Vector3.up * power, ForceMode.Impulse) ile topu yukarı iter ve Eruption 1, Eruption 2 ve benzerlerini günlüğe kaydeder.
  • Üçüncü püskürmeden sonra gayzer bir daha püskürmez.

Play'e basıp topu izle, ardından Check'e bas.

Kendin dene

using UnityEngine;

public class Geyser : MonoBehaviour
{
    public Rigidbody ball;
    public float power = 6f;
    int eruptions;

    void Start()
    {
        // Play'den 1 saniye sonra, ardından her 2 saniyede bir püskür
    }

    // Erupt(): say, ball'u yukarı it, günlüğe kaydet; üçüncüden sonra dur
}
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