Unity JsonUtility不能解析二维数组

原代码方案

[Serializable]
public class TileLayout
{
    public TileBase[,] tileBases;
    public string tileGroupName;
    public Vector3Int[,] vector3Ints;

    public TileLayout(TileBase[,] tileBases, string tileGroupName, Vector3Int[,] vector3Ints)
    {
        this.tileBases = tileBases;
        this.tileGroupName = tileGroupName;
        this.vector3Ints = vector3Ints;
    }
}

使用下面JsonUtility Unity自带Class存储成Json文件

FileStream fileStream = File.Create(Application.streamingAssetsPath + "/" + levelName + ".json");
fileStream.Dispose();
File.WriteAllText(Application.streamingAssetsPath + "/" + levelName + ".json", JsonUtility.ToJson(tileLayout, true));
AssetDatabase.Refresh();

生成的Json文件如下

{
    "tileGroupName": "Ground"
}

解决方案

方案1

/// <summary>
/// 多个瓦块地图的布局
/// </summary>
[Serializable]
public class Multiple
{
    public List<SingleTilemap> singleTilemaps = new List<SingleTilemap>();
}


/// <summary>
/// 单个瓦块地图
/// </summary>
[Serializable]
public class SingleTilemap 
{
    public string tilemapName;
    public List<SingleTile> singleTiles = new List<SingleTile>();

    public SingleTilemap(string tilemapName) => this.tilemapName = tilemapName;
}



/// <summary>
/// 单个瓦块
/// </summary>
[Serializable]
public class SingleTile
{
    public TileBase tileBase;
    public int x, y;

    public SingleTile(TileBase tileBase, int x, int y)
    {
        this.tileBase = tileBase;
        this.x = x;
        this.y = y;
    }
}

这样便解析成功了,如下图

方案二

至于方案二的话可以参考此文章:https://blog.csdn.net/qq_27361571/article/details/105118371

posted @ 2022-02-19 21:30  yassine  阅读(546)  评论(0编辑  收藏  举报