Spawner - Final

Update Spawner Code 4/18/2020

This code includes updated code to: StopAllSpawning( ) This method is executed within LevelManager, it destroys objects with Component of type: PickUp, ScorePickUp, Hazard, change to fix in your code so it is consistent. It also stops any remaining SpawnPrefab methods waiting to be invoked. You may want to delete the MiniGameManager.cs script, otherwise fix any errors caused there.

Verify if this script needs to be added to the Spawner GameObject

using UnityEngine;

public class Spawner : MonoBehaviour {

    [Header("Set in Inspector")]
    public GameObject goodPrefab, badPrefab;

    public int pauseTime = 2; //wait 2 seconds before spawning, //adjust as needed for your game
    public int numToSpawn = 10;//adjust as needed for your game
    public float chanceToSpawnBad = .10f;//adjust as needed for your game
    public float xRange = 8.0f;//adjust as needed for your game
    public float yRangeTop = -2.0f; //adjust as needed for your game
    public float yRangeBottom = -3.5f;//adjust as needed for your game
    public bool activeSpawning = false;


    // Use this for initialization
    void Start() {
        //activeSpawning = true; ///remove later when we start spawning from another class
        //StartSpawning(); //remove later
    }

    public void StartSpawning()   //will be called from another class
    {
        for (int i = 0; i < numToSpawn; i++)
        {
            Invoke("SpawnPrefab", pauseTime * i * 2);
        }
    }

    /// <summary>
    /// Spawns one prefab:  good or bad with some probability of bad
    /// </summary>
    public void SpawnPrefab()
    {
        if (activeSpawning)
        {
            Vector3 position = transform.localPosition;
            position.x = Random.Range(-xRange, xRange);
            position.y = Random.Range(yRangeBottom, yRangeTop);
            float rand = Random.value; //returns value between 0.0 - 1.0 (property)
            GameObject prefab;
            if (rand < chanceToSpawnBad)
            {
                prefab = Instantiate(badPrefab, position, transform.rotation);    //instantiate bad
            }
            else  //instantiate good
            {
                prefab = Instantiate(goodPrefab, position, transform.rotation);
            }
            prefab.transform.SetParent(this.transform); //set Spawner as parent of prefabs in Hierarchy 
           // Debug.Log("Spawned 1");
        }
    } //end SpawnPrefab

    public void StopAllSpawning()
    {
        CancelInvoke("SpawnPrefab");
        activeSpawning = false;
        DestroySpawnedObjects();
    }
    
    void DestroySpawnedObjects()
    {
        PickUp[] items = FindObjectsOfType<PickUp>();
        foreach (PickUp item in items    )
        {
            Destroy(item.gameObject);
        }
        
        //if using scoreItems
        ScorePickUp[] scoreItems = FindObjectsOfType<ScorePickUp>();
        foreach (ScorePickUp scoreItem in scoreItems)
        {
            Destroy(scoreItem.gameObject);
        }

        Hazard[] hazards = FindObjectsOfType<Hazard>();
        foreach (Hazard hazard in hazards)
        {
            Destroy(hazard.gameObject);
        }
    } //end DestroySpawnedObjects
    
    ////used in Project 1: miniGameManager
    public void DestroyAllPickups()
    {
        PickUp[] items = FindObjectsOfType<PickUp>();
        foreach( PickUp item in items       )
        {
            Destroy(item.gameObject);
        }
    }
    
} //end of class

Last updated