CS1502 Error Noob Programmer Need Help :D

I’m fairly new to unity, and decided to try my hand at the intermediate Roguelike Tutorial on the unity learn page. I’m getting 2 errors on my BoardManager Script, which is written in part 4/14 of the tutorial.

Specifically the last line:

Instantiate(exit, new Vector3(columns - 1, rows - 1, 0f), Quaternion.identity);

I’m getting both my errors on that line.

Error CS1502: The best overloaded method match for ‘UnityEngine.Object.Instantiate(UnityEngine.Object, UnityEngine.Vector3, UnityEngine.Quaternion)’ has some invalid arguments (CS1502) (Assembly-CSharp)

&

c:\Users\User\Documents\Rogue\Assets\Scripts\BoardManager.cs(14,14): Error CS1503: Argument ‘1’: cannot convert from ‘UnityEngine.GameObject’ to ‘UnityEngine.Object’ (CS1503) (Assembly-CSharp)

These errors are just too over my head as a noobie, and I was wondering if someone could please show me what I did wrong, and how to correct this. Thanks :smiley:

Here is my Script:
using UnityEngine;
using System;
using System.Collections.Generic;
using Random = UnityEngine.Random;

public class BoardManager : MonoBehaviour {

public class Count
{
	public int minimum;
	public int maximum;

	public Count (int min, int max)
	{
		minimum = min;
		maximum = max;
	}
}

public int columns = 8;
public int rows = 8;
public Count wallCount = new Count (5,9);
public Count foodCount = new Count (1,5);
public GameObject[] exit;
public GameObject[] floorTiles;
public GameObject[] wallTiles;
public GameObject[] foodTiles;
public GameObject[] enemyTiles;
public GameObject[] outerWallTiles; 
//boardHolder is for cleaning up the hiearchy
private Transform boardHolder;
private List <Vector3> gridPositions = new List<Vector3>();

void InitialiseList()
{
	gridPositions.Clear ();
	for (int x = 1; x < columns - 1; x++) 
	{
		for (int y = 1; y < rows- 1; y++)
		{
			gridPositions.Add(new Vector3(x,y,0f));
		}
	}
}

void BoardSetup ()
{
	boardHolder = new GameObject ("Board").transform;

	for (int x = -1; x < columns + 1; x++)
	{
		for (int y = -1; y < rows + 1; y++)
		{
			GameObject toInstantiate = floorTiles [Random.Range (0, floorTiles.Length)];
			if (x == -1 || x == columns || y == -1 || y == rows)
				toInstantiate = outerWallTiles [Random.Range (0, outerWallTiles.Length)];

			GameObject instance = Instantiate(toInstantiate, new Vector3 (x,y,0f), Quaternion.identity) as GameObject;

			instance.transform.SetParent(boardHolder);
		}
	}
}

Vector3 RandomPosition()
{
	int randomIndex = Random.Range(0, gridPositions.Count);
	Vector3 randomPosition = gridPositions[randomIndex];
	gridPositions.RemoveAt(randomIndex);
	return randomPosition;
}

void LayoutObjectAtRandom(GameObject[] tileArray, int minimum, int maximum)
{
	int objectCount = Random.Range (minimum, maximum + 1);

	for (int i = 0; i < objectCount; i++)
	{
		Vector3 randomPosition = RandomPosition();
		GameObject tileChoice = tileArray[Random.Range (0, tileArray.Length)];
		Instantiate (tileChoice, randomPosition, Quaternion.identity); 
	}
}

public void SetupScene(int level)
{
BoardSetup();
InitialiseList();
LayoutObjectAtRandom(wallTiles, wallCount.minimum, wallCount.maximum);
LayoutObjectAtRandom(foodTiles, foodCount.minimum, foodCount.maximum);
int enemyCount = (int)Mathf.Log(level,2f);
LayoutObjectAtRandom(enemyTiles, enemyCount, enemyCount);
Instantiate(exit, new Vector3(columns - 1, rows -1, 0f), Quaternion.identity);
}

}

your exit is an array of GameObjects. the Instantiate method takes 1 GameObject as paramter. so if you like to instantiate all the exit GameObjects you should use a foreach loop, like:

foreach(GameObject e in exit)
    Instantiate(e, new Vector3(columns - 1, rows - 1, 0f), Quaternion.identity);

Or if you want to instantiate only the first element, use:

Instantiate(exit[0], new Vector3(columns - 1, rows - 1, 0f), Quaternion.identity);