Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Unity3D-C#数组初始化和填充:空引用-未设置对象引用_C#_Arrays_Unity3d_Nullreferenceexception - Fatal编程技术网

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