ShV Geschrieben 9. Juni 2020 Melden Share Geschrieben 9. Juni 2020 Ich habe die folgenden Scripts: public class GameOver : MonoBehaviour { public Text Highscore; public GameObject Player; public GameObject Spawner; public GameObject Restart; public void Start() { } private void OnTriggerEnter2D(Collider2D other) { if(other.tag == "Gegner") { PlayerPrefs.SetInt("Highscore", Zähler.currentscore); Debug.Log("Highscore"); Zähler.currentscore = 0; Spawner.SetActive(false); Player.SetActive(false); Restart.SetActive(true); } } } public class Spawner : MonoBehaviour { public GameObject[] Gegner; public List<GameObject> GegnerToSpawn = new List<GameObject>(); int index; private void Awake() { IniGegner(); } // Start is called before the first frame update void Start() { StartCoroutine(SpawnRandomGegner()); } void IniGegner() { index = 0; //Initialisiere die Gegner for (int i = 0; i < Gegner.Length * 10; i++) { GameObject obj = Instantiate(Gegner[index], transform.position, Quaternion.identity); GegnerToSpawn.Add(obj); GegnerToSpawn[i].SetActive(false); index++; if (index == Gegner.Length) { index = 0; } } } // Update is called once per frame void Update() { } IEnumerator SpawnRandomGegner() { //Warte eine gewisse Zeit yield return new WaitForSeconds(Random.Range(1.5f, 4.5f)); //Aktiviere Gegner int index = Random.Range(0, GegnerToSpawn.Count); while(true) { if(!GegnerToSpawn[index].activeInHierarchy) { GegnerToSpawn[index].SetActive(true); GegnerToSpawn[index].transform.position = transform.position; break; } else { index = Random.Range(0, GegnerToSpawn.Count); } } StartCoroutine(SpawnRandomGegner()); } } public class Restart : MonoBehaviour { public GameObject spawner; public GameObject Player; public GameObject Restart1; // Update is called once per frame void Update() { if (CrossPlatformInputManager.GetButtonDown("Restart")) { Neu(); } } public void Neu() { Player.SetActive(true); spawner.SetActive(true); Restart1.SetActive(false); } } Aber wenn ich den Restart-Button gedrückt habe, wird zwar der Spawner wieder aktiviert, aber die Gegner nicht. Woran liegt das? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 9. Juni 2020 Melden Share Geschrieben 9. Juni 2020 Ich habe nur kurz drüber geschaut, aber ich denke die Start() Methode des Spawners wird nicht mehr durchlaufen und damit wird die Co-Routine nicht neu gestartet. Vermutlich sollte es reichen wenn du die Co-Routine in der OnEnable()-Methode wieder neu startest. Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
ShV Geschrieben 15. Juni 2020 Autor Melden Share Geschrieben 15. Juni 2020 Ich habe im Spawnerscript jetzt folgendes hinzugefügt: void Update() { if (CrossPlatformInputManager.GetButtonDown("Restart")) { StartCoroutine(SpawnRandomGegner()); } } Es funktioniert aber trotzdem nicht. Was kann ich machen, damit es funktioniert? Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Zer0Cool Geschrieben 15. Juni 2020 Melden Share Geschrieben 15. Juni 2020 Da könnte der Spawner ggf. noch gar nicht aktiviert sein und daher die "Restart"-Eingabe ins Leere laufen... Lass den Code mal so wie er war und versuch mal folgendes: private void Awake() { IniGegner(); } // Start is called before the first frame update void Start() { StartCoroutine(SpawnRandomGegner()); } // Reactivates the coroutine after GO was disabled void OnEnable() { StartCoroutine(SpawnRandomGegner()); } Ansonsten füge mal ein Debug.Log in den Code ein, um zu schauen ob die Co-Routine läuft: IEnumerator SpawnRandomGegner() { //Warte eine gewisse Zeit yield return new WaitForSeconds(Random.Range(1.5f, 4.5f)); //Aktiviere Gegner Debug.Log("Coroutine is trying to spawn next enemy ..."); int index = Random.Range(0, GegnerToSpawn.Count); while(true) { if(!GegnerToSpawn[index].activeInHierarchy) { GegnerToSpawn[index].SetActive(true); GegnerToSpawn[index].transform.position = transform.position; Debug.Log("Coroutine spawned enemy at " + transform.position); break; } else { index = Random.Range(0, GegnerToSpawn.Count); } } StartCoroutine(SpawnRandomGegner()); } Link zu diesem Kommentar Auf anderen Seiten teilen More sharing options...
Recommended Posts
Archiviert
Dieses Thema ist jetzt archiviert und für weitere Antworten gesperrt.