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!
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 Spawn
Methode folgendermaßen ändern :
public IEnumerator Spawn(randomX, randomY) {
while (true) {
yield return new WaitForSeconds(3);
Instantiate(Enemy, new Vector3(randomX, randomY), Quaternion.identity);
}
}
StopCoroutine
Beachten Sie, dass Sie den von zurückgegebenen IEnumerator speichern Spawn
und die StopCoroutine
Methode 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.
Lass mich ein paar Worte sagen