Accessing the array of a null item / Moving items in array
I am new to unity and starting to make my own small little game. Right now using c#, and I am trying to make a Match3 Game. Currently have problem making the gems/tiles dropping down. I am able to destroy the gem. I am able to use the Coroutine to check if the array is null (access from another script). However I cannot seem to get the gems to drop down, or move the items in the array. think I am not accessing/identifying the actual null tile in the gem Holder correctly. Below is the error I get for the Coroutine
" NullReferenceException: Object reference not set to an instance of an object MouseManager.MouseOverGem (UnityEngine.GameObject ourHitObject) (at Assets/Scripts/MouseManager.cs:127) MouseManager.Update () (at Assets/Scripts/MouseManager.cs:56) "
public Vector2 mapSize;
private Vector3 gridPlacement;
public GameObject[] listGems;
public GameObject gem;
public GameObject[,] gemHolder;
void Start()
{
//allGems = new GameObject[mapSize.x, mapSize.y];
GenerateBoard();
}
public void GenerateBoard()
{
gemHolder = new GameObject[9, 9];
// putting the board into a parent
string holderName = "Generated Board";
Transform boardHolder = new GameObject(holderName).transform;
boardHolder.parent = transform;
for (int x = 0; x < mapSize.x; x++)
{
for (int y = 0; y < mapSize.y; y++)
{
gridPlacement = CoordToPosition(x, y);
int gemsToUse = Random.Range(0, listGems.Length); // making gems random
gem = Instantiate(listGems[gemsToUse], gridPlacement, Quaternion.Euler(Vector3.right * 90)); // putting gems in the board
gem.transform.parent = this.transform; // putting it in parent
gem.name = "(" + x + "," + y + ")"; // naming the grid as coordinates
//make sure tile is aware of its placement on the map
gem.GetComponent<GemPosition>().x = x;
gem.GetComponent<GemPosition>().y = y;
gemHolder[x, y] = gem;
}
}
}
Vector3 CoordToPosition(int x, int y)
{
return new Vector3(-mapSize.x / 2 + 3f + x, 0, -mapSize.y / 2 + 0.5f + y); // position of grid
}
public IEnumerator MoveRowsDown()
{
int nullCount = 0;
for (int x = 0; x < mapSize.x; x++)
{
for (int y = 0; y < mapSize.y; y++)
{
if (gemHolder[x, y] == null)
{
nullCount++;
}
else if (nullCount > 0)
{
gemHolder[x, y] = gemHolder[x, (y - nullCount)];
}
}
nullCount = 0;
}
yield return new WaitForSeconds(.4f);
}
Your answer
Follow this Question
Related Questions
Array index is out of range? 4 Answers
Array index is out of range C# 1 Answer
how to assign name to gameobject list from string list ? 0 Answers
How to compare a position of an object within an array 1 Answer
create array of specific gameobjects 0 Answers