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