Menu
CoddyTech

InvokeRepeating ve CancelInvoke

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

InvokeRepeating(nameof(Blink), 0.5f, 0.5f), ilk olarak 0.5 saniye sonra Blink işlevini çağırır, ardından çağrı iptal edilene kadar her 0.5 saniyede bir tekrar çağırır. İlk sayı, ilk çağrıdan önceki gecikmedir; ikincisi ise çağrılar arasındaki süredir. CancelInvoke(nameof(Blink)) bu çağrıyı durdurur; adı belirtilmeyen CancelInvoke() ise betiğin planladığı tüm Invoke çağrılarını durdurur.

Bu uyarı lambası Space tuşuna basılana kadar yanıp söner, ardından sürekli 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;
    }
}

Oluşturma bölümündeki zamanlayıcı da bir float alanı ve Update() içinde bir kontrol 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 konur: Update() içine konursa her karede bir tekrarlanan çağrı daha planlanır.

challenge icon

Görev

Kolay

Gayzerin belirli aralıklarla üç kez püskürmesini sağla.

  1. Start() içinde InvokeRepeating(nameof(Erupt), 1f, 2f); çağır.
  2. void Erupt() yaz: eruptions değerini 1 artır, ball.AddForce(Vector3.up * power, ForceMode.Impulse); çağır ve "Eruption " + eruptions ifadesini günlüğe kaydet.
  3. Erupt() işlevinin sonunda, eruptions == 3 olduğunda CancelInvoke(nameof(Erupt)); çağır.

“Oyna” düğmesine bas: top, aralarında 2 saniye olacak şekilde üç kez yukarı fırlatılır. Ardından “Kontrol et” düğmesine 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, log'a kaydet; üçüncüden sonra dur
}

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

Kendi başına pratik yap: Unity playground