Unity打包APK后StreamingAssets文件夹丢失,无法读取本地资源
Unity Android打包后无法读取StreamingAssets的解决方法
核心原因
Android平台下,Unity的StreamingAssets文件夹内容不会以独立文件夹形式出现在手机存储中,而是被打包进APK的assets/bin/Data/StreamingAssets目录(或OBB包内),所以你在Android\obb目录找不到该文件夹是正常现象,问题出在读取方式错误,而非构建设置遗漏。
正确读取方式
必须使用Unity提供的Application.streamingAssetsPath路径配合UnityWebRequest(推荐)读取,不能直接用File类操作——因为Android平台下该路径是一个jar:file://协议的URL,而非本地文件路径。
读取JSON配置示例
using UnityEngine; using UnityEngine.Networking; using System.Collections; public class StreamingAssetsLoader : MonoBehaviour { void Start() { StartCoroutine(LoadLocalConfig()); } IEnumerator LoadLocalConfig() { // 自动适配平台的StreamingAssets路径 string configPath = Application.streamingAssetsPath + "/your_config.json"; using (UnityWebRequest request = UnityWebRequest.Get(configPath)) { yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { string jsonContent = request.downloadHandler.text; // 这里写你的JSON解析逻辑 Debug.Log("读取配置成功: " + jsonContent); } else { Debug.LogError("配置读取失败: " + request.error); } } } }
读取本地图片示例
IEnumerator LoadLocalImage() { string imagePath = Application.streamingAssetsPath + "/your_image.png"; using (UnityWebRequest request = UnityWebRequestTexture.GetTexture(imagePath)) { yield return request.SendWebRequest(); if (request.result == UnityWebRequest.Result.Success) { Texture2D texture = DownloadHandlerTexture.GetContent(request); // 将纹理赋值给RawImage或转换为Sprite使用 // rawImageComponent.texture = texture; } else { Debug.LogError("图片读取失败: " + request.error); } } }
构建设置检查
如果确认读取方式正确仍有问题,可检查以下设置:
- 确认Player Settings →
Write Permission设置为Internal或External (SDCard)(不影响StreamingAssets读取,但避免其他权限问题)。 - 若APK体积超过100MB勾选了
Split Application Binary(分割OBB),无需额外设置,Unity会自动处理OBB内的StreamingAssets路径。 - 检查StreamingAssets内的文件是否都在Unity Project窗口中,且导入设置正确(如JSON的
Import Type设为Text,图片格式设置符合要求),打包时Unity会自动包含这些文件。
验证打包内容
可将APK后缀改为.zip解压,查看assets/bin/Data/StreamingAssets目录,若能看到你的配置文件和图片,说明打包成功,问题仅在于读取逻辑。
内容的提问来源于stack exchange,提问作者the-tech-seeker
相关产品推荐
相关产品推荐

