Unity - WaitForSeconds funktioniert nicht innerhalb eines Updates oder einer Schleife

MrBixbite

Ich versuche, ein Objekt kontinuierlich zu instanziieren. Dazu muss ich eine Art Intervall oder Wartezeit haben, damit nicht alles auf einmal instanziiert wird. Ich habe mir das ausgedacht:

public class EnemySpawner : MonoBehaviour
{
     public GameObject Enemy;

     public void Update()
     {
          var random = new Random();
          var randomX = random.Next(-12, 12);
          var randomY = random.Next(-5, 5); 
          StartCoroutine(Spawn(randomX, randomY));
     }

     public IEnumerator Spawn(int randomX, int randomY)
     {
          yield return new WaitForSeconds(3);
          Instantiate(Enemy, new Vector3(randomX, randomY), Quaternion.identity);
     }
}

Am Ende wartet es 3 Sekunden (wie codiert) und instanziiert dann so viele Objekte wie möglich gleichzeitig. Das Ergebnis, auf das ich gehofft hatte, war, dass es eines hervorbringen, drei Sekunden warten, ein anderes hervorbringen würde usw. Jede Information wäre sehr dankbar!

FeRaaC

Wie Josh bereits kommentiert hat, starten Sie jedes Mal eine neue Coroutine, wenn Ihre Update-Methode ausgeführt wird.

Um dies zu beheben, können Sie:

Starten Sie Ihre Coroutine entweder an einer anderen Stelle (in der start()Methode, wenn sie von Anfang an ausgeführt werden soll).

public void Start() {
    StartCoroutine(Spawn(randomX, randomY));
}

oder wenn die Coroutine aus irgendeinem Grund von Ihrem Update aufgerufen werden muss, können Sie Folgendes verwenden:

private bool spawnCoroutineStarted = false;

public void Update() {
    // other code
    if (!spawnCoroutineStarted) {
        spawnCoroutineStarted = true;
        StartCoroutine(Spawn(randomX, randomY));
    }
}

EDIT: Danke an Draco18s für den Hinweis auf mein Versehen.

Um Feinde kontinuierlich zu spawnen, können Sie die SpawnMethode folgendermaßen ändern :

public IEnumerator Spawn(randomX, randomY) {
    while (true) {
        yield return new WaitForSeconds(3);
        Instantiate(Enemy, new Vector3(randomX, randomY), Quaternion.identity);
    }
}

StopCoroutineBeachten Sie, dass Sie den von zurückgegebenen IEnumerator speichern Spawnund die StopCoroutineMethode für diese Referenz verwenden müssen , wenn Sie ihn später verwenden möchten .

Wenn Sie wirklich möchten, dass in einem bestimmten Zeitraum etwas wieder auftritt, sollten Sie InvokeRepeating anstelle von Coroutinen verwenden.

Dieser Artikel stammt aus dem Internet. Bitte geben Sie beim Nachdruck die Quelle an.

Bei Verstößen wenden Sie sich bitte [email protected] Löschen.

bearbeiten am
0

Lass mich ein paar Worte sagen

0Kommentare
LoginNach der Teilnahme an der Überprüfung

Verwandte Artikel

Behebung eines Nichtübereinstimmungsfehlers innerhalb einer Schleife

Das Hinzufügen eines Onclick-Ereignis-Listeners innerhalb einer foreach-Schleife funktioniert nicht

jQuery - Das Verschachteln einer anderen each()-Schleife innerhalb eines vorhandenen each()-Ereignisses funktioniert nicht

Die println-Anweisung funktioniert innerhalb eines Blocks {} oder innerhalb einer Funktion, aber sie funktioniert nicht innerhalb der Klasse ohne Funktion oder Block?

WaitForSeconds funktioniert nicht mehr, wenn die App nicht im Fokus oder auf einer anderen Registerkarte steht

Unity WaitForSeconds-Funktion funktioniert nicht richtig

Das Aufrufen einer Funktion innerhalb einer Schleife funktioniert in Python nicht

for-Schleife funktioniert nicht innerhalb eines Windows-Stapels

Das Aktualisieren einer Variablen innerhalb der for-Schleife funktioniert nicht

Das Aktualisieren einer Variablen innerhalb der for-Schleife funktioniert nicht

Angular 8 ngStyle funktioniert manchmal nicht innerhalb einer Schleife

Bindeelement innerhalb einer for-Schleife Vue funktioniert nicht richtig

Angular patchValue funktioniert nicht innerhalb einer Schleife. Warum?

Else-Anweisung funktioniert nicht innerhalb einer while-Schleife

Der Befehl eval funktioniert nicht innerhalb einer Schleife

Die Isin-Funktion innerhalb einer Schleife funktioniert nicht richtig

Wenn die Schleife innerhalb einer Void-Funktion nicht funktioniert

Select Event Listener funktioniert nicht innerhalb einer forEach-Schleife

Vektor zum Array innerhalb einer Schleife funktioniert nicht

javascript setTimeout Funktion funktioniert nicht innerhalb einer Schleife

Warum funktioniert meine Funktion nicht innerhalb einer Schleife?

findViewById funktioniert nicht in einer statischen Funktion innerhalb eines Fragments

Python: Aktualisieren einer Liste oder eines Arrays innerhalb einer while-Schleife

So beheben Sie, dass IEnumerator WaitForSeconds in Unity C # nicht funktioniert

Warum funktioniert eine While-Schleife innerhalb einer For-Schleife in meinem Programm nicht?

Eine Void-Schleife innerhalb einer Void-Schleife funktioniert nicht. Was macht?

Verwenden des logischen ODER-Operators innerhalb einer Schleife zum Sortieren eines Arrays

<br> funktioniert nicht innerhalb einer #each-Schleife in einer HTML-Vorlagendatei für Lenker

ggplot funktioniert nicht, wenn es sich innerhalb einer for-Schleife befindet, obwohl es außerhalb dieser Schleife funktioniert

TOP Liste

heißlabel

Archiv