Wie kann ich in Unity etwas warten lassen?

6 Antworten

Vom Fragesteller als hilfreich ausgezeichnet

Dafür gibt es in Unity Coroutines mit der Anweisung WaitForSeconds. Das solltest du aber nicht in einer Methode wie OnTriggerEnter2D machen, da diese Methode jedes mal gerufen wird, sobald das Objekt einen entsprechend anderen Collider berührt.

Schau stattdessen mal, wie man in Unity einen Game Over Screen programmiert. Mit "unity game over screen" findest du da in der Suchmaschine deiner Wahl viele gute Ergebnisse.

Hallo,

mittels Thread.Sleep(1000) => 1 Sek warten.
Das aber lässt Vermutlich dein Game komplett einfrieren bis die Sekunden verstrichen sind.

Setzte die Aufgabe in ein Separaten Task ein und arbeite mit await.

var task = Task.Run(async () => await DeineAsyncMethode());
task.Wait();

Sowas in der art brauchst du.

Du solltest die Methode auf die gewartet werden sollte auslagern in einen anderen Task.

Guten Tag,

Da wäre WaitForSconds bzw eine Coroutine eine sinnvolle Lösung. Wie das genau funktioniert findest du in dem Link:

https://docs.unity3d.com/ScriptReference/WaitForSeconds.html

Achte darauf, dass du die Coroutine an der richtigen Stelle startest.

Edit: Ich hab mal ein Projekt von mir rausgekramt und mal ein Beispiel rauskopiert:

 void Update()
    {
        if (foo)
        {
            anim.SetBool("foo", true);
            schildAn = false;
            StartCoroutine(MachAus());
        }
    }
    IEnumerator foo()
    {
        yield return (new WaitForSeconds(0.5f));
        anim.SetBool("foo", false);
    }

Gruß und viel Spaß noch

Woher ich das weiß:eigene Erfahrung
Oklinq 
Fragesteller
 22.06.2020, 11:27

funktioniert leider irgendwie nicht

0
Nevron  22.06.2020, 11:32
@Oklinq

Du musst natürlich darauf achten, dass du die Coroutine an der richtigen Stelle startest. Das mit dem Update() wie in meinem Beispiel, ist natürlich nur ein Beispiel.

Aber andere Frage:

Hast du denn den Trigger auch aktiviert für das Objekt? Wenn ich mich recht entsinne, musstest du das aktivieren, sonst springt er nicht in die onTriggerEnder2D rein.

Somit prüfe erstmal, ob er überhaupt die Abfrage reinspringt. Einfach mal eine Konsolenausgabe in die Abfrage reinmachen.

0
Oklinq 
Fragesteller
 22.06.2020, 12:07
@Nevron

Die erste abfrage geht, trigger hab ich an gemacht

0

Auf was soll denn gewartet werden ? z.B. eine Texteingabe ? dann könntest du da ReadLine(); reinschreiben

Oklinq 
Fragesteller
 22.06.2020, 11:18

Nein einfach ne Sekundenzahl

0
PaulJannik  22.06.2020, 11:19
@Oklinq

Versuch mal

Thread.Sleep(1000);

die 1000 währe jetzt 1 Sekunde

0
Oklinq 
Fragesteller
 22.06.2020, 11:23
@PaulJannik

In der Zeit friert ja aber das Komplette spiel ein!

0

Code:

StartCoroutine((waiter));

und Unten vor den Letzten } Zeichen:

Ienumerator waiter()

{

yield return new WaitForSeconds(5) // 5 Sekunden Wartet er jetzt

//Dein code :

}

Woher ich das weiß:Hobby