如何为 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
我尝试了很多解决方案,但没有人适用于我的情况,我的问题很简单,但我找不到专门针对 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