Unity3D-C#数组初始化和填充:空引用-未设置对象引用
我正试图保存我的游戏数据。在“将游戏数据复制到可序列化的类对象”这一点上,我遇到了一个问题。这是我的密码:Unity3D-C#数组初始化和填充:空引用-未设置对象引用,c#,arrays,unity3d,nullreferenceexception,C#,Arrays,Unity3d,Nullreferenceexception,我正试图保存我的游戏数据。在“将游戏数据复制到可序列化的类对象”这一点上,我遇到了一个问题。这是我的密码: public static void Save() { // set save file . . // import game data to serializable class PlayerData data = new PlayerData(); GameObject[] tiles = GameObject.FindGameObj
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]
类成员初始化是否有特殊情况?我在哪里犯错误以及如何修复错误?将磁贴
的每个元素初始化为磁贴
的默认值。如果平铺
是引用类型(即类
而不是结构
),则它将为空
。除了创建数组外,还需要将每个元素初始化为新的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]
将返回null
。尝试访问null
引用上的X
成员会自然引发NullReferenceException
可能的重复。您不会向tiles数组添加任何内容,因此数据。tiles[i]返回null,因此无法访问X成员。新手错误。我想我需要刷新我的阅读习惯。谢谢你指出。那么什么瓷砖=新瓷砖[40];does@user2320445:它创建一个包含40个null
条目的Tile[]
数组。也就是说:tiles[0]
为null
,tiles[1]
为null
,tiles[39]
为null
。想象一下,如果Tile
没有公共的无参数构造函数,或者有几个构造函数重载,那么tiles=new Tile[40]
应该如何填充元素?如果您不想创建新的平铺
对象,而是想用已有的平铺
对象填充数组,该怎么办;实例化一堆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