CS2335
Master 1.0.0
Master 1.0.0
  • Introduction
  • Introduction
    • Introduction
      • Game Design
    • Unity - Download
    • Visual Studio - IDE
    • Unity Manual, Scripting API
  • Unity Basics
    • Unity Editor Windows
    • Behavior Components
    • 2D Project, Scenes
      • Create 2D Sprite GameObject
      • Create UI-Text GameObject
    • MonoBehavior - Base-Class
    • Create a Custom C# Script
  • Game Coding Structures
    • Games Overview
    • Unity Engine - Event Functions
    • Finite State Machines
    • UML Class Diagram
  • Animation
    • Animator Controller
    • Animation Steps
      • Optional: Dead Animation
    • PlayerController.cs V0
  • Project 1 - Player
    • Player GameObject v1
      • C# Generics, Statics
    • Player GameObject - Jump
    • PlayerController.cs V2-Jump
    • PickUp PreFabs
      • Sorting Layers
    • PlayerController.cs V3-Collide
    • GameData Version1
    • GameData Version2
    • PlayerController V4-Score
  • Project 1 Details
    • Project1 GameObjects
    • PlayerStats Version1
      • UI-Canvas
    • Utility Class
    • Simple Spawner
    • MiniGameManager
      • Logic Diagrams
      • StartButton
      • ResultsPanel
  • Project1 Enhancements
    • PickUp - SelfDestruct
    • Spawn from List of Prefabs
  • Project 2 - StateManager
    • Project 2 - Learning Objectives
      • Inspiration
        • Branching Story Structures
        • Branching Structures
        • Hero's Journey
        • Visual Novel in Unity-Links
    • Project 2 - Starter Assets
    • State Machine Framework
    • StateManager - Singleton Design Pattern
    • Interface IStateBase
    • Create SceneXState.cs
    • OptionPanel Prefab
      • UI Images: Sprite Sheets
      • Button Image-Transitions
    • Project 2 - List of Steps
    • Project 2 - Starter Code
  • Project 2 -Dialogue
    • Hide_Show_Panel Script
    • Edit OptionPanel
    • Simple DialogPrefab
    • Conversation Entry
    • SimpleDialog.cs
    • ScriptableObjects
      • Scriptable Object Factory
    • Conversation Scriptable Objects
    • DialogManager_ConvList
      • DialogManager V2
      • Coroutines: Dynamic Text
      • DialogPrefab wImage
  • Overview: Branching Logic
    • DialogTrigger
    • Dictionary Data-Structure
      • Unity PlayerPrefs Dictionary
    • GameData Version3
    • Dictionary: choiceData
      • SaveChoice, ChoicePanel
        • choiceData - examples
          • Dictionary Value to Disable Options
    • Configure UI-Button Listeners
      • NPC Animation
      • NPC Activation
    • UI-Triggered Animations
    • Simple Inventory
    • EndState Conditions
    • Script ExecutionOrder
    • Custom UnityEvents
    • PlayerStats v2
      • ModifyPlayerData
      • BuyItem
    • Text Input
  • UI Components
    • Finding Game Objects
    • Game Objects: UI vs. 2D Sprite
    • UI Elements
      • Canvas: Screen-Space Render-Mode
      • UI-Buttons To Change Scene
  • Proj4: Inventory System
    • Inventory-System
      • GameData version4
      • Install and Configure
      • Diagrams, Resources
        • Item, Gem, Potion Classes
        • Inventory Class
      • InventoryDisplay, Slot UI
        • InventoryDisplay Class
        • Slot Class
        • Hazard Class
        • Layout Groups
      • Customization Steps
        • Configure Animation
        • AddItem Button
        • Concrete Class: Food
        • MiniGame Mods
          • PlayerController Mods
      • Code: InventorySystem
        • GameData, PickUp Mods
      • Resources: Data Structures
  • Custom Unity Events
    • Event Publishing Patterns
    • Custom Event Messaging
  • Proj4: Mini-Game
    • Simplified Mini-Game
      • PlayerController_v2 Mods
        • PlayerController_v2_final
      • MiniGameManager_v2
    • MiniGame-Overview-Proj4
    • LevelManager
      • LevelManager Logic Diagram
      • LevelManager FSM
      • LoadLevel, StartLevel Logic
      • Code Framework
    • Timer
  • Project 4 - Code Mods
    • Project 4 - Steps
    • Project 4 - Code
      • Code: Final Versions
        • PlayerController Mods
          • PlayerController_v2 Mods
        • GameData - Final
        • LevelManager
        • PlayerStats - Final
        • PickUp, Hazard, ScorePickUp
        • Spawner - Final
        • CameraFollow
        • ScreenFader
        • MiniGameState
        • Example: EndState
      • MiniGameWin Logic
  • Optional, Supplemental Content
    • Optional Content
      • Particle Systems
      • Adding Audio
      • Screen Fading and Reloading
      • ScriptableObjects
      • Disable Debug Logging
      • Events and Actions
      • Saving Data - Serialization
      • Parallax Scrolling
      • Change Sprites
    • XR - Extended Reality
  • Computing Concepts
    • Programming Patterns
      • State - FSM
      • Singleton Pattern
    • C# Language
      • Variables
      • Delegates
      • Dictionary
      • Enum
      • Encapsulation
        • C# Properties
        • Access Modifiers
      • Generics < T >
      • Inheritance
      • Interface
      • List< T >
      • Polymorphism
      • Queue< T >
      • Switch-Case
      • Foreach
      • Static
      • Ternary Operator: ?
      • this
    • Diagrams
      • State Machine Framework
      • UML Class Diagrams
      • Level Manager Logic Diagram
      • Flow-Chart: NumberGame
      • FSM: NumberGame
    • Tools
    • Glossary
    • References and Resources
    • Random Thoughts
Powered by GitBook
On this page
  • Objects to Spawn - PickUp Prefabs
  • Simple Spawner Logic
  • Spawner Methods, Helper Methods
  • Important Spawner GameObject Configuration Details:
  • Spawner.cs

Was this helpful?

  1. Project 1 Details

Simple Spawner

Script Component to spawn PickUp Prefab gameObjects.

PreviousUtility ClassNextMiniGameManager

Last updated 4 years ago

Was this helpful?

Objects to Spawn - PickUp Prefabs

PickUp Prefabs to be Spawned in the MiniGame should have the following configuration:

  • PickUp GameObjects should be a PreFab

  • A SpriteRenderer Component

  • At least 1 Collider2D component with IsTrigger set to true (can have additional nested Collider2D components if necessary)

  • A PickUp script component, with the public attributes like: value, type set in the inspector.

  • GameObject: Tag: "Collectible" or "Hazard"

  • Can have a Rigidbody2D if the spawned object will be moving

  • Can have an Animator component if the object will be animated

    Important: The PickUp Prefabs must have Tag that corresponds to Tags in OnTriggerEnter2D( ).

Simple Spawner Logic

Logic Overview: Define variables that can be customized for each instance of a Spawner:

  • Specify PickUp prefabs to spawn ( good, bad )

  • Specify total number of prefabs to spawn (numToSpawn)

  • Specify probability of bad prefabs to spawn. (chanceToSpawnBad)

  • Constrain where objects will be spawned. (xRange, yRange)

  • Determine time between spawning objects (pauseTime)

  • Define boolean variable that can toggle: (stop, start) spawning

Spawner Methods, Helper Methods

Start Spawning:

  • SpawnPrefab( )

    • private method, executed in a loop in StartSpawning( )

    • spawns 1 prefab instance - with some probability of it being good / bad type

    • will only spawn a prefab if activeSpawning is true;

  • StartSpawning ( )

    • public method to be executed in MiniGameManager

    • For testing, we'll start with calling this in Start( ) - we'll remove this code later

    • has a loop that invokes SpawnPrefab( ) multiple times with delays

Stop Spawning:

  • DestroyAllSpawnedObjects( )

    • Creates Array of PickUps by Finding all items of type < PickUp > in the scene

  • StopAllSpawning( )

    • Cancels all Invoked SpawnPrefab( ) methods

    • Sets activeSpawning to false;

    • Executes DestroyAllSpawnedObjects( )

Important Spawner GameObject Configuration Details:

When initializing the Inspector Panel for Spawner Component: 1. Delete all PickUp Prefab gameObjects from the Scene 2. Select Original Prefab from Assets: GoodPrefab, BadPrefab (from the Assets tab) see image below

Spawner.cs

  • The code below creates a simple spawner.

  • Create a C# Script in your project Assets: Spawner.

  • Double-click the script so that it opens in Visual Studio.

  • Add the code from below to the script.

  • In Visual Studio, build to compile the script.

  • In Unity, Add the Spawner.cs component to an empty GameObject, Spawner in the scene.

//Sept 17, 2020
using System.Collections;
using System.Collections.Generic;
using UnityEngine;

public class Spawner : MonoBehaviour
{
    [Header("Set in Inspector")]
    public GameObject goodPrefab, badPrefab;

    public bool activeSpawning = false;

    [SerializeField]
    int pauseTime = 2; //may need to customize for your game

    [SerializeField]
    int numToSpawn = 10; //customize as needed

    [SerializeField]
    float chanceToSpawnBad = 0.10f; //modify as needed

    [SerializeField]
    float xRangeLeft = -8.0f; //customize as needed

    [SerializeField]
    float xRangeRight = 8.0f; //customize as needed

    [SerializeField]
    float yRangeTop = -2.0f; //customize as needed

    [SerializeField]
    float yRangeBottom = -3.5f; //customize as needed

    // Start is called before the first frame update
    void Start()
    {
        activeSpawning = true; //remove this code later
        StartSpawning(); //remove this code later, move to MiniGameManager
    }


    ///Will be exectued in MiniGameManager when startButton clicked
    //MiniGameState is set to active
    public void StartSpawning()
    {
        Debug.Log("Start Spawning called");
        //Loop generates multiple delayed invocations of SpawnPrefab( ) method.
        for (int i = 0; i < numToSpawn; i++)
        {
            Invoke("SpawnPrefab", pauseTime * i * 2);  //Delays between SpawnPrefab( ) exection
        }
    }

    //Executed from the StartSpawning method
    //Many instances of this method will be invoked 
    void SpawnPrefab()
    {
        if (activeSpawning) //won't actually spawn anything unless this is true 
        {
            //Where to spawn based on transform of Spawner gameObject

            Vector3 position = transform.localPosition;
            position.x = Random.Range(xRangeLeft, xRangeRight);
            position.y = Random.Range(yRangeBottom, yRangeTop);

            float rand = Random.value;
            GameObject prefab; //temp variable 
            if (rand < chanceToSpawnBad)
            { //spawn bad prefab
                prefab = Instantiate(badPrefab, position, transform.rotation);
            }
            else  //instantiate good one
            {
                prefab = Instantiate(goodPrefab, position, transform.rotation);
            }
            prefab.transform.SetParent(this.transform); //all spawned objects will be children of the Spawner gameObject
        }
    }//end SpawnPrefab

    //This will be executed from MiniGameManager
    public void StopAllSpawning()
    {
        CancelInvoke("SpawnPrefab");  //cancels all SpawnPrefab( ) methods waiting to be executed
        activeSpawning = false;
        DestroySpawnedObjects();
    }

    //Exectued in StopAllSpawning
    private void DestroySpawnedObjects()
    {
        PickUp[] items = FindObjectsOfType<PickUp>();
        foreach (PickUp item in items)
        {
            Destroy(item.gameObject);
        }
    }

}// end class Spawner

See PickUp PreFabs
Select Prefab from Assets Tab, Not the Scene Tab
Select Prefab From Assets, Not from the Scene