Recycling Obstacles With Object Pooling

Checked with version: 5.5

-

Difficulty: Beginner

In this beginner friendly live training we will look at creating a simple 2D Flappy Bird style game. We'll cover best practices for infinite or endless games, basic object pooling and creating cartoon physics effects.

Recycling Obstacles With Object Pooling

Beginner 2D Game Creation

ColumnPool

Code snippet

using UnityEngine;
using System.Collections;

public class ColumnPool : MonoBehaviour 
{
    public GameObject columnPrefab;                                 //The column game object.
    public int columnPoolSize = 5;                                  //How many columns to keep on standby.
    public float spawnRate = 3f;                                    //How quickly columns spawn.
    public float columnMin = -1f;                                   //Minimum y value of the column position.
    public float columnMax = 3.5f;                                  //Maximum y value of the column position.

    private GameObject[] columns;                                   //Collection of pooled columns.
    private int currentColumn = 0;                                  //Index of the current column in the collection.

    private Vector2 objectPoolPosition = new Vector2 (-15,-25);     //A holding position for our unused columns offscreen.
    private float spawnXPosition = 10f;

    private float timeSinceLastSpawned;


    void Start()
    {
        timeSinceLastSpawned = 0f;

        //Initialize the columns collection.
        columns = new GameObject[columnPoolSize];
        //Loop through the collection... 
        for(int i = 0; i < columnPoolSize; i++)
        {
            //...and create the individual columns.
            columns[i] = (GameObject)Instantiate(columnPrefab, objectPoolPosition, Quaternion.identity);
        }
    }


    //This spawns columns as long as the game is not over.
    void Update()
    {
        timeSinceLastSpawned += Time.deltaTime;

        if (GameControl.instance.gameOver == false && timeSinceLastSpawned >= spawnRate) 
        {   
            timeSinceLastSpawned = 0f;

            //Set a random y position for the column
            float spawnYPosition = Random.Range(columnMin, columnMax);

            //...then set the current column to that position.
            columns[currentColumn].transform.position = new Vector2(spawnXPosition, spawnYPosition);

            //Increase the value of currentColumn. If the new size is too big, set it back to zero
            currentColumn ++;

            if (currentColumn >= columnPoolSize) 
            {
                currentColumn = 0;
            }
        }
    }
}

2D Game Creation

  1. 2D Game Development Walkthrough
  2. 2D Mode
  3. The Sprite Type
  4. Sprite Renderer
  5. The Sprite Editor
  6. Sorting Layers
  1. 2D Physics Overview
  2. Rigidbody 2D
  3. Collider 2D
  4. Hinge Joint 2D
  5. Area Effector 2D
  6. Distance Joint 2D
  7. Point Effector 2D
  8. Bouncing & Sliding in 2D
  1. Introduction to Unity from a 2D perspective
  2. 2D Character Controllers
  3. 2D Catch Game - Pt 1
  4. 2D Catch Game - Pt 2
  5. 2D Catch Game - Pt 3
  6. 2D Catch Game - Q&A / AMA
  7. 2D Scrolling Backgrounds
  8. Top Down 2D Game Basics
  9. 2D Physics: Fun with Effectors
  10. Making an "Angry Birds" style game - Part 1
  11. Making an "Angry Birds" style game - Part 2
  12. 2D Games for Non-Programmers
  1. Project Goals
  2. Adding Sprites
  3. The Bird Script
  4. Animating The Bird
  5. Score and GameOver UI Setup
  6. Adding The Game Controller
  7. Scrolling Repeating Backgrounds
  8. Adding Column Obstacles
  9. Recycling Obstacles With Object Pooling
  10. Questions and Answers
  1. Intro and Session Goals
  2. Scripting Gravity
  3. Detecting Overlaps
  4. Scripting Collision
  5. Horizontal Movement
  6. Player Controller Script
  7. Adding Player Animation
  8. Questions and Answers
  1. Introduction and Goals
  2. Sorting Layers and 9-Slice Sprites
  3. 2D Composite and Capsule Colliders
  4. Sorting Groups and Transparency Sort Axis
  5. 2D Physics Reference Project
  6. Questions and Answers
  1. Introduction to 2D Essentials
  2. 2D Character Setup with Corgi Engine
  3. 2D Follow Camera w/ Cinemachine
  4. Adding Enemies with Corgi Engine
  5. 2D Lighting with 2DDL Pro
  6. Tween Effects with DOTween Pro
  7. Easy UI with Doozy UI
  8. Questions and Answers for 2D Essentials
  1. Intro to 2D World building w/ Tilemap
  2. Core Tilemap Concepts
  3. Tilemap Collider 2D and Composite Collider 2D
  4. Confined Follow Camera with Cinemachine For 2D
  5. Using Rule Tiles With Tilemap
  6. Random and Animated Tilemap Tiles
  7. Custom Tilemap Brush To Spawn Prefabs
  8. Questions and Answers for 2D Worldbuilding
  1. Getting Started with SVG Importer