使用JsonUtility序列化2D数组

时间:2019-10-25 13:30:55

标签: c# json unity3d serialization

所以我试图用Unity JSON实用程序保存一些数据,但是我有一些麻烦。

我有一个World类,里面有一些参数,例如Width Height等,还有一个二维的“ Tiles”数组,它是另一个类

精简版:

public class World
{
[SerializeField]
private Tile[,] tiles;
public Tile[,] Tiles { get { return tiles; } protected set { } }

[SerializeField]
private int width;
public int Width
{
    get { return width; }
}

[SerializeField]
private int height;
public int Height
{
    get { return height; }
}
public int WorldSize
{
    get
    {
        return height * width;
    }
}
}

在另一个脚本中,我有保存系统,当前我正在尝试用其图块保存该世界:

    public void SaveWorld(World worldToSave)
    {
    SaveSystem.Init();
    string json = JsonUtility.ToJson(worldToSave);
    Debug.Log("Json es: " + json);
    //AHORA MISMO ESTO GUARDA SOLO WIDTH Y HEIGHT DEL MUNDO
    File.WriteAllText(SaveSystem.SAVE_FOLDER + "/Save.txt", json);
    }

瓦片已经具有Seri​​alizable,并且如果我创建一个1D数组,我可以保存它们并从它们中获取数据,但是我不知道如何使用2D或如何更改它(它是2D的,因为我使用了它们X和Y坐标)。

此外,我真的不理解JSON如何将这个磁贴包装在世界内部,以及磁贴内部的事物等等。

1 个答案:

答案 0 :(得分:0)

自Unity序列化程序does not support multi-dimensional array起,您可以执行以下操作:

  • 将2D数组转换为1D数组
  • 序列化为JSON
  • 从JSON反序列化
  • 将1D阵列转换回2D阵列

示例:

<img src="<php echo base_url('path/to/image/'.$img);?>" />

结果:

enter image description here enter image description here enter image description here

请注意,您需要使用JSON序列化数组的宽度和高度。