Jump to content
Unity Insider Forum

IEnumerator


Thoarmin

Recommended Posts

Hallo an Alle,

habe den Urlaub letzte Woche genutz um wieder ein wenig an meinem spiel zu basteln. Ich wollte das Leben des Helden nach dem Kampf wieder automatisch regenerieren lassen. Also nach einer gewissen Zeit sollen die Lebenspunkte langsam wieder aufgefüllt werden. Ich habe also die Abfrage ob der Spieler im Kampf ist und ob der Spieler Leben verloren hat. Wenn biedes Stimmt wird die erste Coroutine gestartet die bis zum ersten Lebenspunkt wartet. Das funktioniert auch alles. Wenn die Zeit rum ist soll das Leben langsam aufgefüllt werden (alle x Sekunden ein Lebenspunkt). Das funktioniert leider nicht, das Leben wird sofort auf MaxLeben gesetzt. Da ich viel ausprobiert habe sieht der Code inzwischen etwas durcheinander aus. Ich setze ihn mal hier rein. Hoffe ihr blickt da durch.

Hier die Abfrage:

 if (!Spieler.infight)
        {
            if(SAktuellesLeben < Maxleben)
            {
                if (!lebenreg)
                {
                    StartCoroutine(Lebenauffüllen());
                }
                else
                {
                    StartCoroutine(Lebenregeneration());
                }
            }
            else
            {
                lebenreg = false;
            }
        }
       

und hier die Zwei Rotinen:

 IEnumerator Lebenauffüllen()
    {
        yield return new WaitForSeconds(5);
        lebenreg = true;
    }

 

    IEnumerator Lebenregeneration()
    {
        yield return new WaitForSeconds(3);
        SAktuellesLeben = SAktuellesLeben + 1;
    }

Würde mich freuen wenn jemand helfen kann. Wünsche Euch noch einen schönen Samstag.

 

LG

Thoarmin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Du startest die Coroutine "Lebenregeneration" mehrfach, was denke ich dazuführt, daß im Prinzip nach 3 Sekunden + X Frames das Leben wieder voll ist (jedes neue Frame wird dabei die Coroutine erneut gestartet).

Ich würde es so machen:

   IEnumerator Lebenregeneration()
    {
        lebenreg = true;
        while (SAktuellesLeben < Maxleben) {
          SAktuellesLeben = SAktuellesLeben + 1;
          yield return new WaitForSeconds(3);
        }
        lebenreg = false;                                          
    }
        if (!Spieler.infight)
         {
            if(SAktuellesLeben < Maxleben)
            {
                if (!lebenreg)
                {
                    StartCoroutine(Lebenregeneration());
                }
            }
         }

 

Link zu diesem Kommentar
Auf anderen Seiten teilen

Danke für die Antwort, hat mir weiter geholfen. Ich musste nur zwei Kleinigkeiten ändern.

1. Sollte die Regeneration erst nach einiger Zeit starten, unabhängig von der Zeit die ein Lebenspunkt heilt.

2. Wen während der Erholung ein neuer Kampf startet soll die unterbrochen werden.

Habe das wie unten abgeändert und es scheint zu klappen.

IEnumerator Lebenregeneration()
    {
        lebenreg = true;
        yield return new WaitForSeconds(10);

        while (SAktuellesLeben < Maxleben)
            {
                SAktuellesLeben = SAktuellesLeben + 1;
                yield return new WaitForSeconds(3);
            if (Spieler.infight)
            {
                break;
            }
            }
        
        lebenreg = false;
    }

Vielen Dank für die Hilfe.

 

LG

Thoarmin

Link zu diesem Kommentar
Auf anderen Seiten teilen

Archiviert

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

×
×
  • Neu erstellen...