Menu
CoddyTech

InvokeRepeating, CancelInvoke

Fa parte della sezione Fisica e gameplay del percorso Unity di Coddy. Lezione 22 di 63.

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 è 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 con un campo float e un controllo in Update(). Con InvokeRepeating, Unity tiene traccia del tempo ed effettua le chiamate. La chiamata a InvokeRepeating va inserita in Start(): in Update() programmerebbe un'altra chiamata ripetuta a ogni frame.

challenge icon

Sfida

Facile

Il Geyser lancia in aria la palla che si trova sopra di esso. Il suo script ha ball, power e un conteggio di eruptions. Fai in modo che erutti secondo una pianificazione:

  • La prima eruzione avviene 1 secondo dopo aver premuto Gioca, poi ce n’è una ogni 2 secondi.
  • Un’eruzione è un metodo chiamato Erupt: aggiunge 1 a eruptions, spinge la palla verso l’alto con ball.AddForce(Vector3.up * power, ForceMode.Impulse) e registra Eruption 1, Eruption 2 e così via.
  • Dopo la terza eruzione il geyser si ferma definitivamente.

Premi Gioca e guarda la palla, poi premi Controlla.

Provalo tu

using UnityEngine;

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

    void Start()
    {
        // Fai eruttare 1 secondo dopo Play, poi ogni 2 secondi
    }

    // Erupt(): conta, spingi ball verso l'alto, registra nel log; fermati dopo la terza eruzione
}
quiz iconMettiti alla prova

Questa lezione include un breve quiz. Inizia la lezione per rispondere e tenere traccia dei tuoi progressi.

Tutte le lezioni di Fisica e gameplay