Menu
CoddyTech

InvokeRepeating, CancelInvoke

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 23 di 71.

InvokeRepeating(nameof(Blink), 0.5f, 0.5f) chiama Blink per la prima volta dopo 0.5 secondi, poi di nuovo ogni 0.5 secondi, finché non viene annullato. Il primo numero indica il ritardo prima della prima chiamata, il secondo il tempo tra una chiamata e l’altra. CancelInvoke(nameof(Blink)) lo interrompe e CancelInvoke(), senza specificare un nome, interrompe ogni Invoke che lo script ha programmato.

Questa spia lampeggia finché non viene premuto Spazio, poi rimane accesa:

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;
    }
}

Il timer del capitolo sulla generazione farebbe lo stesso usando un campo float e un controllo in Update(). Con InvokeRepeating, Unity tiene traccia del tempo ed esegue le chiamate. La chiamata a InvokeRepeating va inserita in Start(): in Update() programmerebbe un’altra chiamata ripetuta a ogni fotogramma.

challenge icon

Sfida

Facile

Fai eruttare il geyser tre volte secondo una programmazione.

  1. In Start(), chiama InvokeRepeating(nameof(Erupt), 1f, 2f);.
  2. Scrivi void Erupt(): aggiungi 1 a eruptions, chiama ball.AddForce(Vector3.up * power, ForceMode.Impulse); e registra "Eruption " + eruptions.
  3. Alla fine di Erupt(), quando eruptions == 3, chiama CancelInvoke(nameof(Erupt));.

Premi «Gioca»: la palla viene lanciata verso l’alto tre volte, a 2 secondi di distanza. Poi premi «Verifica».

Provalo tu

using UnityEngine;

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

    void Start()
    {
        // Avvia l'eruzione 1 secondo dopo Play, poi ogni 2 secondi
    }

    // Erupt(): conta le eruzioni, spingi la palla verso l'alto, registra nel log; fermati dopo la terza
}

Tutte le lezioni di Fisica e gameplay

Esercitati da solo: Playground Unity