我正在尝试保存我的游戏数据。在“将游戏数据复制到可序列化的类对象”中,我遇到了一个问题。这是我的代码:
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]
类成员初始化是否有特殊情况?我在哪里犯错,我该如何解决?
答案 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
。