Jump to content
Unity Insider Forum

Szene auf einen Input warten lassen


Pasies

Recommended Posts

Ich möchte gerne, dass am Ende, wenn der Spieler verliert, die Szene weiterhin zu sehen ist, mit der Aufschrift "Tap To Play Again". Alles funktioniert der Text wird dementsprechend erzeugt etc. Allerdings startet das Spiel sofort neu, wenn der Spieler eine falsche Antwort wählt. Also funktioniert anscheinend meine Methode WaitForInput nicht richtig. Hab einiges gegoogelt und nichts hilfreiches gefunden.

void update() 
{
    if (richtige antwort) 
    {
    //weiter
    } 
  	else 
    {
    startCoroutine(WaitForInput());
	//lade die Szene neu
    }
}

private IEnumerator WaitForInput()
{
    while (!Input.GetMouseButton(0))
    {
        yield return null;
    }
}

Hoffe ihr könnt mir helfen :)

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn ich das hier:

void update() 
{
startCoroutine(WaitForInput());
//lade die Szene neu
}

richtig verstehe, dann startest du die Coroutine und gleich im Anschluss lädst du die Szene neu. StartCoroutine unterbricht den Code deiner Methode aber nicht, es geht danach gleich weiter im Text. Wenn du warten willst, musst du das auch in der Coroutine machen:

void update() 
{
startCoroutine(WaitForInput());
}

private IEnumerator WaitForInput()
{
    while (!Input.GetMouseButton(0))
    {
        yield return null;
    }
    //lade die Szene neu
}

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Gut zu wissen, dass die Zeilen nach der StartCoroutine weiterhin ausgeführt werden. Allerdings ist das Ergebnis gleich. Beim Debuggen habe ich gemerkt, dass die While-Schleife nicht betreten wird. 

private IEnumerator waitForInput()
{
    while (!Input.GetMouseButtonDown(0))
    {
        Debug.Log("wait for input");
        yield return null;
    }
    SceneManager.LoadScene(SceneManager.GetActiveScene().buildIndex);
}

Allerdings wüsste ich nicht wieso dies nicht eintrifft, da die Bedingung ja sagt: Solange es keinen Input gibt bleibe in der Schleife. Habe ich vlt. einen Denkfehler oder gibt es eine andere Bedingung die für die While-Schleife passen würde?

Gruß

Link zu diesem Kommentar
Auf anderen Seiten teilen

Wenn er gar nicht erst in die Schleife geht, wird waitForInput vermutlich gar nicht aufgerufen. Ich sehe im ersten Code, dass du eine Methode namens "update" hast. Meinst du "Update"? Man muss auf Groß- und Kleinschreibung achten. Aber selbst wenn du Update meinst, ist der Code noch problematisch. Du startest dann jeden Frame einmal eine neue Instanz dieser Coroutine. Das werden sehr schnell sehr viele.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Ja meine die Update. Die Funktion wird aber definitiv aufgerufen, da ich den Debug außerhalb der While-Schleife getestet habe und die aktuelle Szene ja erneut geladen wird. Also kann es sein, dass man in Update besser keine StartCoroutine aufruft? Was wäre eine andere Option?

Link zu diesem Kommentar
Auf anderen Seiten teilen

Naja, kommt halt drauf an. Es gibt da kein "gut" oder "schlecht". Es gibt höchstens "nicht das, was du hier willst". Und dass du einmal pro Frame eine Art "Job" startest, der soundso lange wartet und dann etwas tut, sodass du bei 60FPS nach zehn Sekunden warten deine Sache 600-Mal ausführst... das ist vermutlich nicht das, was du willst.

Der Kontext ist ja, dass du ein Ereignis (Game Over) hast. Und nach diesem Ereignis willst du anfangen zu warten. Du willst also zu dem Teil deines Codes, der dein Game Over-Ereignis auslöst, und diesen Code direkt oder indirekt diese Coroutine auslösen lassen.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Hab mich bisschen weiter eingelesen und habe erfahren, dass Input.GetMouseButtonDown für einen ganzen Frame true bleibt. Da ich zwei solcher If-Statements verwende, was ich am Anfang blöder weise nicht erwähnt habe, habe ich jetzt vor der While-Schleife yield return null hinzugefügt. Ist von der Performance wahrscheinlich nicht die beste Möglichkeit, allerdings ist das Spiel, was ich zurzeit entwickle, definitiv nicht anspruchsvoll und es gibt keine aktiven Figuren oder sonstiges.

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.

×
×
  • Neu erstellen...