【问题标题】:Lists of Classes with a List - Object reference not set to an instance of an object具有列表的类列表 - 对象引用未设置为对象的实例
【发布时间】:2015-10-08 21:05:06
【问题描述】:

我很难确定我的失败之处。我认为这与我在列表中的列表有关......但我不确定。

类:

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);

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

Debug.Log(ListOfChunks.Count);

如何在列表中存储和访问这种类型的列表? afaik“树”的分配是好的(从对象到游戏对象的转换)。你能告诉我该怎么做吗? :)

编辑:也许这与 List Initialisation 有关 - 但我不知道如何在 C# 中做到这一点

【问题讨论】:

  • 什么是i?显然,该索引处有一个空对象,或者该对象的 InventoryGameObjects 列表为空。
  • for (int i = 0; i
  • 所以我应该没问题:)
  • 必须初始化类中的 C++ 列表中的这个“gcnew”是什么?
  • 听起来ListofChunks 索引处的ChunkTerrainData 为空。你能告诉我们GenerateTerrain的函数吗?

标签: c# list class unity3d


【解决方案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

试试看。

【讨论】:

    【解决方案2】:

    假设的答案是:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-01-31
      • 2013-10-19
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多