Eines der Skripts in meiner Szene besteht darin, ein Raster aus Cubes zu erstellen. Der Prozess benötigt ziemlich viel Zeit und ich habe versucht, es zu implementieren, ohne dass Unity nicht reagiert.Raster mit Hilfe von Routinen laden - warten bis zum Ende,
Der Code derzeit - funktioniert zu - Sie können sehen, wie das Raster generiert wird. Die anderen Skripts in der Szene führen jedoch gleichzeitig ihre Aufgaben aus und verursachen Ausnahmen (sie greifen auf Kacheln im Grid zu, die noch nicht erstellt wurden).
Das folgende Skript ist das einzige Skript, das eine 'Awake'-Funktion hat - die anderen Skripte führen' Update 'und' OnGUI 'aus, bevor das erste Skript beendet ist.
GridGenerator.cs
public GameObject[,] tiles = new GameObject[Constants.BOARD_WIDTH, Constants.BOARD_HEIGHT];
// Run a double loop to create each tile.
void Awake()
{
StartCoroutine(doSetup());
}
IEnumerator doSetup()
{
yield return StartCoroutine (loadLevel());
DoOtherStuff();
}
IEnumerator loadLevel()
{
for (int i = 0; i < Constants.BOARD_WIDTH; i++)
{
for (int j = 0; j < Constants.BOARD_HEIGHT; j++)
{
tiles[i,j] = newTile();
yield return(0);
}
}
}
Wie würde ich die DoOtherStuff() - Methode warten, bis die Co-Routine beendet ist?
Ich habe einen boolean Toggle versucht (die Einheit erstarrte) Ich habe versucht, mit Schloss oder
(was nicht funktioniert hat) ist es eine effizientere Art und Weise, dies zu tun?
BEARBEITEN: Der Code schließt OtherStuff() erfolgreich ab, nachdem das Raster generiert wurde. Abgesehen von der doOtherStuff() ist eine Referenz des Rasters zu einer separaten Klasse zu übergeben. Die separate Klasse gibt Ausnahmen aus, wenn sie versuchen, in der Update-Methode auf das Raster zuzugreifen. Was bedeutet, dass die Update-Methode aufgerufen wird, bevor das Erwachen in GridGenerator.cs abgeschlossen ist.
so die anderen Dinge sind für die Fliesen suchen, gibt es eine Möglichkeit, dass, wenn sie‘ Auf der Suche nach ihnen können sie sagen, ob sie generiert wurden und noch verfügbar sind? Möglicherweise muss mehr Code zur Verfügung gestellt werden, der zeigt, wie die Kacheln von den anderen Routinen gespeichert/aufgerufen werden. – DLeh
Ja, das ist eine Lösung - um sicherzustellen, dass die Kacheln zuerst generiert werden. Aber das Hinzufügen zusätzlicher Bedingungen zu allen Orten, die die Kacheln erfordern ... Ah, die Kacheln sind in einem mehrdimensionalen Array von GameObjects gespeichert. Aktualisiert den Hauptpost - danke. – user1662292