2D Roguelike BoardManager/GameManager Errors

Problems with BoardManager & GameManager scripts in 2D Roguelike tutorial. I’ve gone as far as copying/pasting the examples from here (Unity Connect), from the completed version of the project, and from every other mention I’ve seen on the forum for this problem but to no avail. I saw someone else has the same problem as of 5 days ago so I suspect it’s perhaps due to newer Unity version incompatibility? I’m using Unity 2019 Ver 2.0f1.

Errors are as follows:
Assets\Scripts\BoardManager.cs(10,18): error CS0101: The namespace ‘Completed’ already contains a definition for ‘BoardManager’
Assets\Scripts\GameManager.cs(8,19): error CS0101: The namespace ‘Completed’ already contains a definition for ‘GameManager’
Assets\Scripts\GameManager.cs(14,15): error CS0111: Type ‘GameManager’ already defines a member called ‘Awake’ with the same parameter types
Assets\Scripts\GameManager.cs(20,15): error CS0111: Type ‘GameManager’ already defines a member called ‘InitGame’ with the same parameter types
Assets\Scripts\GameManager.cs(25,15): error CS0111: Type ‘GameManager’ already defines a member called ‘Update’ with the same parameter types
Assets\Scripts\BoardManager.cs(45,14): error CS0111: Type ‘BoardManager’ already defines a member called ‘InitialiseList’ with the same parameter types
Assets\Scripts\BoardManager.cs(64,14): error CS0111: Type ‘BoardManager’ already defines a member called ‘BoardSetup’ with the same parameter types

And several similar Type ‘BoardManager’ erros. There’s also an error that says:
Assets\Scripts\BoardManager.cs(13,10): error CS0579: Duplicate ‘Serializable’ attribute

I attempted to comment on the post that was similar to this, but received an error message, so I’m creating this one in the hope that if it becomes more apparent that multiple people are experiencing the same issue, there’s a greater likelihood that the problem will be addressed; thank you.

GameManager Script:
using UnityEngine;
using System.Collections;

using System.Collections.Generic;        //Allows us to use Lists. 

public class GameManager : MonoBehaviour

    public static GameManager instance = null;                //Static instance of GameManager which allows it to be accessed by any other script.
    private BoardManager boardScript;                        //Store a reference to our BoardManager which will set up the level.
    private int level = 3;                                    //Current level number, expressed in game as "Day 1".

    //Awake is always called before any Start functions
    void Awake()
        //Check if instance already exists
        if (instance == null)

            //if not, set instance to this
            instance = this;

        //If instance already exists and it's not this:
        else if (instance != this)

            //Then destroy this. This enforces our singleton pattern, meaning there can only ever be one instance of a GameManager.

        //Sets this to not be destroyed when reloading scene

        //Get a component reference to the attached BoardManager script
        boardScript = GetComponent<BoardManager>();

        //Call the InitGame function to initialize the first level 

    //Initializes the game for each level.
    void InitGame()
        //Call the SetupScene function of the BoardManager script, pass it current level number.


    //Update is called every frame.
    void Update()



BoardManager Script

using UnityEngine;
using System;
using System.Collections.Generic; //Allows us to use Lists.
using Random = UnityEngine.Random; //Tells Random to use the Unity Engine random number generator.

namespace Completed


public class BoardManager : MonoBehaviour
    // Using Serializable allows us to embed a class with sub properties in the inspector.
    public class Count
        public int minimum;             //Minimum value for our Count class.
        public int maximum;             //Maximum value for our Count class.

        //Assignment constructor.
        public Count (int min, int max)
            minimum = min;
            maximum = max;

    public int columns = 8;                                         //Number of columns in our game board.
    public int rows = 8;                                            //Number of rows in our game board.
    public Count wallCount = new Count (5, 9);                        //Lower and upper limit for our random number of walls per level.
    public Count foodCount = new Count (1, 5);                        //Lower and upper limit for our random number of food items per level.
    public GameObject exit;                                            //Prefab to spawn for exit.
    public GameObject[] floorTiles;                                    //Array of floor prefabs.
    public GameObject[] wallTiles;                                    //Array of wall prefabs.
    public GameObject[] foodTiles;                                    //Array of food prefabs.
    public GameObject[] enemyTiles;                                    //Array of enemy prefabs.
    public GameObject[] outerWallTiles;                                //Array of outer tile prefabs.

    private Transform boardHolder;                                    //A variable to store a reference to the transform of our Board object.
    private List <Vector3> gridPositions = new List <Vector3> ();    //A list of possible locations to place tiles.

    //Clears our list gridPositions and prepares it to generate a new board.
    void InitialiseList ()
        //Clear our list gridPositions.
        gridPositions.Clear ();

        //Loop through x axis (columns).
        for(int x = 1; x < columns-1; x++)
            //Within each column, loop through y axis (rows).
            for(int y = 1; y < rows-1; y++)
                //At each index add a new Vector3 to our list with the x and y coordinates of that position.
                gridPositions.Add (new Vector3(x, y, 0f));

    //Sets up the outer walls and floor (background) of the game board.
    void BoardSetup ()
        //Instantiate Board and set boardHolder to its transform.
        boardHolder = new GameObject ("Board").transform;

        //Loop along x axis, starting from -1 (to fill corner) with floor or outerwall edge tiles.
        for(int x = -1; x < columns + 1; x++)
            //Loop along y axis, starting from -1 to place floor or outerwall tiles.
            for(int y = -1; y < rows + 1; y++)
                //Choose a random tile from our array of floor tile prefabs and prepare to instantiate it.
                GameObject toInstantiate = floorTiles[Random.Range (0,floorTiles.Length)];

                //Check if we current position is at board edge, if so choose a random outer wall prefab from our array of outer wall tiles.
                if(x == -1 || x == columns || y == -1 || y == rows)
                    toInstantiate = outerWallTiles [Random.Range (0, outerWallTiles.Length)];

                //Instantiate the GameObject instance using the prefab chosen for toInstantiate at the Vector3 corresponding to current grid position in loop, cast it to GameObject.
                GameObject instance =
                    Instantiate (toInstantiate, new Vector3 (x, y, 0f), Quaternion.identity) as GameObject;

                //Set the parent of our newly instantiated object instance to boardHolder, this is just organizational to avoid cluttering hierarchy.
                instance.transform.SetParent (boardHolder);

    //RandomPosition returns a random position from our list gridPositions.
    Vector3 RandomPosition ()
        //Declare an integer randomIndex, set it's value to a random number between 0 and the count of items in our List gridPositions.
        int randomIndex = Random.Range (0, gridPositions.Count);

        //Declare a variable of type Vector3 called randomPosition, set it's value to the entry at randomIndex from our List gridPositions.
        Vector3 randomPosition = gridPositions[randomIndex];

        //Remove the entry at randomIndex from the list so that it can't be re-used.
        gridPositions.RemoveAt (randomIndex);

        //Return the randomly selected Vector3 position.
        return randomPosition;

    //LayoutObjectAtRandom accepts an array of game objects to choose from along with a minimum and maximum range for the number of objects to create.
    void LayoutObjectAtRandom (GameObject[] tileArray, int minimum, int maximum)
        //Choose a random number of objects to instantiate within the minimum and maximum limits
        int objectCount = Random.Range (minimum, maximum+1);

        //Instantiate objects until the randomly chosen limit objectCount is reached
        for(int i = 0; i < objectCount; i++)
            //Choose a position for randomPosition by getting a random position from our list of available Vector3s stored in gridPosition
            Vector3 randomPosition = RandomPosition();

            //Choose a random tile from tileArray and assign it to tileChoice
            GameObject tileChoice = tileArray[Random.Range (0, tileArray.Length)];

            //Instantiate tileChoice at the position returned by RandomPosition with no change in rotation
            Instantiate(tileChoice, randomPosition, Quaternion.identity);

    //SetupScene initializes our level and calls the previous functions to lay out the game board
    public void SetupScene (int level)
        //Creates the outer walls and floor.
        BoardSetup ();

        //Reset our list of gridpositions.
        InitialiseList ();

        //Instantiate a random number of wall tiles based on minimum and maximum, at randomized positions.
        LayoutObjectAtRandom (wallTiles, wallCount.minimum, wallCount.maximum);

        //Instantiate a random number of food tiles based on minimum and maximum, at randomized positions.
        LayoutObjectAtRandom (foodTiles, foodCount.minimum, foodCount.maximum);

        //Determine number of enemies based on current level number, based on a logarithmic progression
        int enemyCount = (int)Mathf.Log(level, 2f);

        //Instantiate a random number of enemies based on minimum and maximum, at randomized positions.
        LayoutObjectAtRandom (enemyTiles, enemyCount, enemyCount);

        //Instantiate the exit tile in the upper right hand corner of our game board
        Instantiate (exit, new Vector3 (columns - 1, rows - 1, 0f), Quaternion.identity);


Okay I think I found the solution in a comment here (2d Roguelike tutorial error: "The type or namespace name `BoardManager' could not be found" - Questions & Answers - Unity Discussions) for anyone else that runs into this.

  1. Remove namespace Completed and the first { after it.
  2. Remove the last } in the script.

When I did that, those errors went away; coincidentally I now have a new error:

NullReferenceException: Object reference not set to an instance of an object
GameManager.InitGame () (at Assets/Scripts/GameManager.cs:23)
GameManager.Awake () (at Assets/Scripts/GameManager.cs:16)

If I find a solution to this new error, I’ll post it here.

I am facing the same issue. can you please share the solution.,what was the problem? can you please share? I am stuck on the same issue.