我有一个问题,以确定我的失败在哪里。我认为它与列表中的列表有关...但我不确定。
类别:
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#
中做到这一点答案 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>();
// ...