null referance when adding to a list please help
i have a small piece of code that just wont work whatever way ive tried it, its probably really simple but pulling my hair out now lol so any help appreciated
the issue is when looping through i want to add the objects to a new list but everytime i do i get a null referance exception
using UnityEngine;
using System.Collections;
using System.Collections.Generic;
public class TileGenerator : MonoBehaviour {
public TerrainTiles[] terrainTiles;
public List<Zone> weightedTiles;
float totalWeight;
[System.Serializable]
public struct TerrainTiles{
public string name;
public TerrainTile[] tiles;
}
[System.Serializable]
public struct TerrainTile{
public GameObject tile;
public int weight;
}
[System.Serializable]
public struct Zone{
public List<GameObject> tiles;
}
public void SetTileWeights()
{
List<Zone> weights = new List<Zone> ();
for (int i = 0; i < terrainTiles.Length; i++)
{
weights.Add (new Zone ());
for (int j = 0; j < terrainTiles [i].tiles.Length; j++)
{
List<GameObject> go = new List<GameObject> ();
for (int k = 0; k < terrainTiles [i].tiles [j].weight; k++)
{
GameObject tmpTile = terrainTiles [i].tiles [j].tile;
go.Add (tmpTile);
Debug.Log (weights.Count + " " + i);
}
weights [i].tiles.AddRange (go);
}
}
}
public GameObject GetTile(int zone){
return weightedTiles [zone].tiles [Random.Range (0, weightedTiles [zone].tiles.Count)];
}
}
the line weights[i].tiles.addRange(go) is the one throwing the error and i cant figure out for the life of me why?
again any help appreciated
Answer by elenzil · Mar 20, 2016 at 03:46 PM
it's because Zone
is a struct, and as such its members are not automatically initialized. so tiles
is null in there.
change this:
weights.Add (new Zone ());
to something like this:
Zone z = new Zone();
z.tiles = new List< GameObject >();
weights.Add(z);
also, in the general advice department, there are a couple ways to figure out these types of issues when they come up. one is to use the debugger in MonoDevelop, stick a breakpoint on the line w/ the problem, and then inspect all the variables involved.
another is to just add print statements. eg, if your problem line is weights[i].tiles.addRange(go)
, then print out weights. is it null ? if not then print out weights[i]. is it null ? if not, then print out weights[i].tiles, and so on.
Your answer
Follow this Question
Related Questions
List().Add freezes Unity 0 Answers
assign objects to strings from SQLite table 0 Answers
Getting objects out of a list and then comparing them 0 Answers
Adding to list, how to fix NullReferenceException 1 Answer
How to delete an object if there is another object of the same type at that position ? 1 Answer