【发布时间】:2021-10-27 18:16:33
【问题描述】:
我正在 Unity 中创建一个游戏,该游戏使用 Tilemap 以程序方式生成一个类似于 2D Minecraft 工作方式的世界。我有两个类:Chunk 是 16x16 int 数组,包含瓦片信息,Region 是 3x3 Chunk 数组。块用于将切片加载到切片地图上,区域用于将数据保存和加载到 JSON 文件。当玩家在玩游戏时,会在其当前区块周围加载一个 3x3 区块区域,在其当前区域周围加载一个 3x3 区域区域。以下是类:
//Stores tile data of a chunk
[Serializable]
public class Chunk
{
public int[,] tiles = new int[CHUNK_SIZE, CHUNK_SIZE];
}
//Stores Chunk data of a region
[Serializable]
public class Region
{
public Vector2Int location;
public Chunk[,] chunks = new Chunk[REGION_SIZE, REGION_SIZE];
}
以下是生成区域,填充块,然后序列化它的代码:
Region region = new Region();
region.location = new Vector2Int(x, y);
for (int i = 0; i < REGION_SIZE; i++)
{
for (int j = 0; j < REGION_SIZE; j++)
{
region.chunks[i, j] = GenerateChunk();
}
}
string regionJson = JsonUtility.ToJson(region);
我遇到的问题是生成的 regionJson 字符串仅包含位置信息而不包含块信息。我知道 JsonUtility 是最小的并且有数组的问题,但是我认为在一个类中包装一个数组可以解决这个问题。我想弄清楚问题是来自包含数组的 Chunk 类、包含 Chunk 数组的 Region 类,还是完全不同的东西。非常感谢任何帮助!
【问题讨论】:
-
JsonUtility 不支持多维数组的序列化。我想你在这里查看解决方法:stackoverflow.com/questions/58559529/…
-
阅读Script Serialization 了解内置支持的类型...其余使用 Newtonsoft JSON.Net(现在通过包管理器作为包提供)或其他第三方库
-
@BFyre 从未见过关于不支持多维数组的任何内容。感谢您的澄清和链接的解决方案!