unity 加载 streamingassets json
时间: 2025-01-22 08:00:13 浏览: 49
### 如何在 Unity 中从 StreamingAssets 文件夹读取 JSON 数据
#### 使用 `StreamReader` 和 `Application.dataPath`
对于桌面平台(Windows),可以直接利用 C# 的标准库来处理文件操作:
```csharp
using UnityEngine;
using LitJson;
using System.IO;
public class TaskManager : MonoBehaviour {
void Start() {
string path = Path.Combine(Application.dataPath, "StreamingAssets", "daojuData.json");
if (File.Exists(path)) {
using (StreamReader reader = new StreamReader(path)) {
string jsonContent = reader.ReadToEnd();
// 将 JSON 字符串反序列化为目标对象
TuJianList data = JsonMapper.ToObject<TuJianList>(jsonContent);
Debug.Log("成功加载JSON数据!");
}
} else {
Debug.LogError("未能找到指定路径下的JSON文件:" + path);
}
}
}
```
[^1]
#### 跨平台解决方案——使用 `UnityWebRequest`
考虑到不同操作系统间路径差异较大,推荐采用更通用的方式即通过 URL 访问资源。具体实现取决于目标设备的操作系统。
##### Android 平台
针对 Android 设备上的应用安装包内嵌资源访问需求,需构建特定格式的 URI 来定位 assets 下的内容:
```csharp
string url = $"jar:file://{Application.dataPath}!/assets/daojuData.json";
UnityWebRequest request = UnityWebRequest.Get(url);
yield return request.SendWebRequest();
if (!request.isNetworkError && !request.isHttpError) {
byte[] results = request.downloadHandler.data;
// 去除 BOM 头部字节(如果存在)
int offset = 0;
if ((results[0] & 0xFF) == 0xEF &&
(results[1] & 0xFF) == 0xBB &&
(results[2] & 0xFF) == 0xBF) {
offset = 3;
}
string jsonString = Encoding.UTF8.GetString(results, offset, results.Length - offset);
var jsonData = JsonMapper.ToObject(jsonString);
}
else {
Debug.LogError($"请求失败:{request.error}");
}
```
[^2][^4]
##### iOS 及其他移动平台
iOS 应用程序沙盒环境内的相对路径通常位于应用程序 bundle 内部,因此可直接拼接得到绝对路径;而对于 WebGL 或者某些特殊场景,则可能需要调整为 HTTP(S) 协议形式:
```csharp
// 对于 iOS 等原生支持 file:// 方式的平台
string filePath = Path.Combine(Application.streamingAssetsPath, "yourFileName.json");
// 如果是 Web 构建版本则切换至网络获取模式
#if UNITY_WEBGL || OTHER_SPECIFIC_PLATFORMS
filePath = "http://" + Application.absoluteURL + "/" + fileName;
#endif
var www = UnityWebRequest.Get(filePath);
yield return www.SendWebRequest();
if (www.result != UnityWebRequest.Result.Success) {
throw new Exception($"Failed to load asset from {filePath}. Error:{www.error}");
}
string resultText = Encoding.UTF8.GetString(www.downloadHandler.data);
Debug.Log(resultText);
```
阅读全文
相关推荐

















