我正在尝试保存我的游戏数据。在"将游戏数据复制到可序列化类对象中"的时候,我遇到了一个问题。这是我的代码:
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]
类成员初始化是否存在特殊情况?我在哪里犯了错误?我该如何修复它?
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
。尝试访问null
引用上的X
成员自然会抛出NullReferenceException
。