【问题标题】:Using Unity JsonUtility with class containing arrays将 Unity JsonUtility 与包含数组的类一起使用
【发布时间】: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 从未见过关于不支持多维数组的任何内容。感谢您的澄清和链接的解决方案!

标签: arrays json unity3d


【解决方案1】:

当 JsonNet 只是为我这样做时,我不会在这种情况下使用 JsonUtility 来解决问题。

using Newtonsoft.Json;
string regionJson = JsonConvert.SerializeObject(region);

我已经通过生成一些假数据测试了您的场景,它与多维数组完美配合。

【讨论】:

  • 像魅力一样工作。感谢您继续为我进行测试!
猜你喜欢
  • 1970-01-01
  • 2013-04-13
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-12-08
  • 2017-08-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多