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.
Sfida
FacileFai eruttare il geyser tre volte secondo una programmazione.
- In
Start(), chiamaInvokeRepeating(nameof(Erupt), 1f, 2f);. - Scrivi
void Erupt(): aggiungi 1 aeruptions, chiamaball.AddForce(Vector3.up * power, ForceMode.Impulse);e registra"Eruption " + eruptions. - Alla fine di
Erupt(), quandoeruptions == 3, chiamaCancelInvoke(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
1Corpo rigido
Gravità e massaSpingi con AddForceSalta con un impulsoFixedUpdate per la fisicaVelocitàCorpi cinematiciRiepilogo: piattaforma di lancio4Coroutine
InvokeInvokeRepeating, CancelInvokeLa tua prima coroutineCicli nelle coroutineInterrompere le coroutineRiepilogo: conto alla rovescia7Rotazione
Angoli di EuleroQuaternioniGuarda nella direzione in cui ti muoviRuota in modo fluidoRiepilogo: Torretta10Progetto: Fuga dall'arena
L'arenaCacciatori2Collisioni
OnCollisionEnterCosa ho colpito?Rompersi all'impattoRestare a terraRimbalzo e attritoForme dei ColliderRiepilogo: muro distruttibile5Progetto: Corsa alle monete
La palla rotolanteMonete da raccogliereEsercitati da solo: Playground Unity