Jump to content
Unity Insider Forum
Sign in to follow this  
ShV

Spawner spawnt keine Gegner mehr

Recommended Posts

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?

Share this post


Link to post
Share on other sites

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.

Share this post


Link to post
Share on other sites

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?

Share this post


Link to post
Share on other sites

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());
    }

 

  • Thanks 1

Share this post


Link to post
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
Sign in to follow this  

×
×
  • Create New...