Unity3D-C#数组初始化和填充:空引用 - 未设置对象引用

时间:2014-11-07 16:48:06

标签: c# arrays unity3d nullreferenceexception

我正在尝试保存我的游戏数据。在“将游戏数据复制到可序列化的类对象”中,我遇到了一个问题。这是我的代码:

public static void Save()
{
    // set save file
    .
    .

    // import game data to serializable class
    PlayerData data = new PlayerData();

    GameObject[] tiles = GameObject.FindGameObjectsWithTag("Tile");
    int i = 0;
    print (data.tiles.Length);  // prints as expected (initialization in constructor)
    foreach(GameObject tile in tiles)
    {
        data.tiles[i].X = tile.GetComponent<TileScript>().X;
        ^^^^^^^^^^^^^^^
        //null reference: object reference not set to an instance of object

        i++;
    }
    .
    .
    .
    print ("Game Saved!");
}

以下是我正在尝试将游戏数据保存到的课程:

[Serializable]
class PlayerData
{
    public class Building
    {
        public int index;
    }
    public class Tile
    {
        public int X,Y;
        .
        .
    }

    public Tile[] tiles;

    public PlayerData()
    {
        tiles = new Tile[40];

    }
}

我找不到我犯的错误。 [Serializable]类成员初始化是否有特殊情况?我在哪里犯错,我该如何解决?

1 个答案:

答案 0 :(得分:0)

tiles的每个元素都初始化为默认值Tile。如果Tile是引用类型(即class而不是struct),那么它将是null。除了创建数组之外,还需要将每个元素初始化为新的Tile对象:

public Tile[] tiles;

public PlayerData()
{
    tiles = new Tile[40];
    for (int i = 0; i < tiles.Length; i++)
        tiles[i] = new Tile();
}

如果您不这样做,并尝试访问以下数据:

data.tiles[i].X

data.tiles[i]将返回null。尝试访问X引用上的null成员会自然引发您的NullReferenceException