带有List的类列表 - 未将对象引用设置为对象的实例

时间:2015-10-08 21:05:06

标签: c# list class unity3d

我有一个问题,以确定我的失败在哪里。我认为它与列表中的列表有关...但我不确定。

类别:

public class ChunkTerrainData
{
    public int OriginX;
    public int OriginZ;
    public string ChunkMaterialData;
    public int[,] ChunkHeightmap;
    public string[,] ChunkInventory;
    public List<GameObject> InventoryGameObjects;
}

代码问题:

public static List<ChunkTerrainData> ListOfChunks = new List<ChunkTerrainData>();
//Start()
ChunkData = GenerateTerrain(ThisChunkOriginX, ThisChunkOriginZ, WithChunkData);
ListOfChunks.Add(ChunkData);
//Update()
GameObject Tree;
Tree = (GameObject)Instantiate(Tree_a, InstatiateTreeStone_Position, InstatiateTreeStone_Rotation);
Tree.transform.parent = TerrainMesh.transform;
ListOfChunks[i].InventoryGameObjects.Add(Tree);   //some ListOfChunks

在最后一行我得到一个错误(但转换效果很好):

  

NullReferenceException:未将对象引用设置为对象的实例

我也做不到(因为我得到同样的错误):

Debug.Log(ListOfChunks[i].InventoryGameObjects.Count);

什么有效(使用相同的List):

Debug.Log(ListOfChunks.Count);

如何在List中存储和访问此类型的列表? afaik“树”的分配是好的(从对象转换为GameObject)。你能告诉我该怎么办? :)

编辑:也许它与此List Initialisation有关 - 但我不知道如何在C#

中做到这一点

2 个答案:

答案 0 :(得分:1)

您永远不会初始化InventoryGameObjects字段。以下是它的外观:

public static List<ChunkTerrainData> ListOfChunks = new List<ChunkTerrainData>();
//Start()
ChunkData = GenerateTerrain(ThisChunkOriginX, ThisChunkOriginZ, WithChunkData);
ChunkData.InventoryGameObjects = new List<GameObject>();
ListOfChunks.Add(ChunkData);
//Update()
GameObject Tree = (GameObject)Instantiate(Tree_a, InstatiateTreeStone_Position, InstatiateTreeStone_Rotation);
Tree.transform.parent = TerrainMesh.transform;
ListOfChunks[i].InventoryGameObjects.Add(Tree);   //some ListOfChunks

试一试。

答案 1 :(得分:0)

所谓的答案是:

//...
ChunkData = GenerateTerrain(ThisChunkOriginX, ThisChunkOriginZ, WithChunkData);
ListOfChunks.Add(ChunkData);
ListOfChunks[ListOfChunks.Count - 1].InventoryGameObjects = new List<GameObject>();
// ...