Wiederholt aufrufen, Aufruf abbrechen
Teil des Abschnitts Physik und Gameplay der Unity-Journey von Coddy. Lektion 23 von 71.
InvokeRepeating(nameof(Blink), 0.5f, 0.5f) ruft Blink zum ersten Mal nach 0.5 Sekunden auf, dann wieder alle 0.5 Sekunden, bis der Aufruf abgebrochen wird. Die erste Zahl ist die Verzögerung vor dem ersten Aufruf, die zweite die Zeit zwischen den Aufrufen. CancelInvoke(nameof(Blink)) beendet ihn, und CancelInvoke() ohne Namen beendet alle Invoke-Aufrufe, die das Skript eingeplant hat.
Diese Warnleuchte blinkt, bis die Leertaste gedrückt wird, und bleibt dann eingeschaltet:
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;
}
}Der Timer aus dem Kapitel zum Erzeugen würde denselben Zweck mit einem float-Feld und einer Prüfung in Update() erfüllen. Bei InvokeRepeating verwaltet Unity die Zeit und führt die Aufrufe aus. Der Aufruf von InvokeRepeating gehört in Start(): In Update() würde bei jedem Frame ein weiterer wiederholter Aufruf eingeplant.
Aufgabe
EinfachLass den Geysir nach einem Zeitplan dreimal ausbrechen.
- Rufe in
Start()InvokeRepeating(nameof(Erupt), 1f, 2f);auf. - Schreibe
void Erupt(): Addiere 1 zueruptions, rufeball.AddForce(Vector3.up * power, ForceMode.Impulse);auf und protokolliere"Eruption " + eruptions. - Rufe am Ende von
Erupt(), wenneruptions == 3,CancelInvoke(nameof(Erupt));auf.
Drücke „Spielen“: Der Ball wird dreimal im Abstand von 2 Sekunden nach oben geschleudert. Drücke anschließend „Prüfen“.
Probier es selbst
using UnityEngine;
public class Geyser : MonoBehaviour
{
public Rigidbody ball;
public float power = 6f;
int eruptions;
void Start()
{
// 1 Sekunde nach Play ausbrechen, danach alle 2 Sekunden
}
// Erupt(): zählen, den Ball nach oben stoßen, protokollieren; nach dem dritten Mal stoppen
}
Alle Lektionen in Physik und Gameplay
1Rigidbody
Schwerkraft und MasseMit AddForce schiebenMit einem Impuls springenFixedUpdate für PhysikGeschwindigkeitKinematische KörperRückblick: Startrampe4Coroutinen
AufrufenWiederholt aufrufen, Aufruf abbrechenDeine erste CoroutineSchleifen in CoroutinenCoroutinen beendenRückblick: Countdown10Projekt: Arena-Flucht
Die ArenaJäger2Kollisionen
OnCollisionEnterWas habe ich getroffen?Beim Aufprall zerbrechenAuf dem Boden stehenAbprallen und ReibungCollider-FormenRückblick: Zerstörbare Wand5Projekt: Münzrausch
Der rollende BallMünzen zum Einsammeln11Abschließende Herausforderungen
KanonenreichweiteBewegliche ZieleMurmelgolfIns LochEscape RoomDie TürÜbe selbstständig: Unity-Playground