如何为 windows 加载 json 构建统一

how to Load json for windows build unity

我尝试了很多解决方案,但没有人适用于我的情况,我的问题很简单,但我找不到专门针对 windows build 的任何答案。我尝试加载 json 形式的持久性,流媒体和资源在 android 中都运行良好,但没有任何解决方案适用于 windows 构建。这是我的代码,请帮助我。

public GameData gameData;
    private void LoadGameData()
    {
        string path = "ItemsData";
        TextAsset targetFile = Resources.Load<TextAsset>(path);
        string json = targetFile.text;
        gameData = ResourceHelper.DecodeObject<GameData>(json);
        //  gameData = JsonUtility.FromJson<GameData>(json);
        print(gameData.Items.Count);
}

这是我的数据class

[Serializable]
public class GameData
{
    [SerializeField]
    public List<Item> Items;


    public GameData()
    {
        Items = new List<Item>();
    }
}

public class Item
{
    public string Id;
    public string[] TexturesArray;

    public bool Active;

    public Item()
    {
    }
    public Item(string _id, string[] _textureArray ,  bool _active = true)
    {
        Id = _id;
        TexturesArray = _textureArray;
        Active = _active;
    }
}

为了被(反)序列化 Item 应该是 [Serializable]

using System;

...

[Serializable]
public class Item
{
    ...
}

那么你可以简单地使用 Unity 的内置 JsonUtility.FromJson:

public GameData gameData;
private void LoadGameData()
{
    string path = "ItemsData";
    TextAsset targetFile = Resources.Load<TextAsset>(path);
    string json = targetFile.text;
    gameData = JsonUtility.FromJson<GameData>(json);
    print(gameData.Items.Count);
}

用于从例如persistentDataPath 我总是用类似

的东西
var path = Path.Combine(Application.persistentDataPath, "FileName.txt")
using (var fs = File.Open(path, FileMode.Open, FileAccess.Read, FileShare.Read))
{
    using (var sr = new StreamReader(fs))
    {
        var json = sr.ReadToEnd();

        ...
    }
}

为了开发,我实际上将我的文件放入 StreamingAssets (streamingAssetsPath) 而 运行 Unity 编辑器中的代码。

然后在运行时我从 persistentFilePath 读取。如果文件不存在,我首先从 streamingassetsPath 复制它。

Here I wrote more about this approach