You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Unity打包iOS/Android端无法读取StreamingAssets内文件问题咨询

跨平台读取StreamingAssets下txt文件的可行解决方案

核心问题根源

硬编码单平台路径、使用仅支持桌面端的文件读取接口是这类问题的主要诱因,移动端StreamingAssets路径的访问规则和桌面端存在本质差异,不能直接套用桌面端的读取逻辑。

  • 统一使用官方路径常量,禁止手动拼接平台前缀
    不要手动写jar:file://、/Raw这类平台专属路径前缀,直接调用Unity内置的Application.streamingAssetsPath常量即可,该常量会根据当前运行平台自动返回合规的路径地址,手动拼接很容易因Unity版本迭代、系统版本差异出现路径格式错误。
    路径拼接时统一用Path.Combine(Application.streamingAssetsPath, "source.txt")生成最终地址,避免手动拼接斜杠出现多写、漏写斜杠的问题。

    注意:iOS文件系统大小写敏感,必须严格核对StreamingAssets文件夹名、文件名的大小写,拼写错误会直接导致文件找不到。

  • 按平台适配读取接口,不要全平台复用File类读取
    不同平台对StreamingAssets的访问支持存在差异,直接用C#原生File类、File.Exists()方法在移动端大概率失效:

    • 编辑器、Windows/Mac/Linux桌面端:Application.streamingAssetsPath指向文件系统内的真实目录,支持直接用File.ReadAllText()、FileStream等原生接口同步读取,也支持File.Exists()判断文件是否存在
    • Android、iOS端:StreamingAssets内的文件会被压缩进安装包(Android为jar包内的assets目录、iOS为安装包内的Raw目录),不存在于公开文件系统路径下,不支持原生File类直接读取,也不支持File.Exists()判断,必须通过UnityWebRequest协程异步读取。
      移动端通用读取代码示例:
using UnityEngine;
using UnityEngine.Networking;
using System.IO;
using System.Collections;

public class LoadStreamingTxt : MonoBehaviour
{
    void Start()
    {
        StartCoroutine(ReadSourceTxt());
    }

    IEnumerator ReadSourceTxt()
    {
        string targetPath = Path.Combine(Application.streamingAssetsPath, "source.txt");
        UnityWebRequest req = UnityWebRequest.Get(targetPath);
        yield return req.SendWebRequest();

        if (req.result == UnityWebRequest.Result.Success)
        {
            string fileContent = req.downloadHandler.text;
            // 拿到文本内容后执行后续业务逻辑
            Debug.Log($"读取成功,内容长度:{fileContent.Length}");
        }
        else
        {
            Debug.LogError($"读取失败,路径:{targetPath},错误信息:{req.error}");
        }
    }
}
  • 排查打包配置类问题

    • 选中Project面板内的source.txt文件,在Inspector面板检查平台导入设置,确认Android、iOS平台都勾选了「Include」选项,避免打包时文件被排除
    • 确认StreamingAssets文件夹直接放置在Assets目录根路径下,不要嵌套在其他资源文件夹内,文件夹名拼写完全正确(不要写成StreamingAsset、streamingassets这类错误命名)
    • 测试阶段先关闭Player Settings内的「Split Application Binary」(应用分包)选项,该选项开启后StreamingAssets文件会被打入OBB扩展包,若OBB未正确放置到设备指定目录也会出现读取失败问题,确认读取正常后再按需开启分包配置。
  • 长期稳定方案:首次启动复制到可读写路径
    StreamingAssets为只读路径,打包后无法修改其中内容。如果后续存在修改txt内容的需求,可在应用第一次启动时,将StreamingAssets内的源文件复制到Application.persistentDataPath目录下——该目录全平台支持原生File类读写、不存在压缩包访问限制,后续所有读写操作都针对该目录下的文件即可,彻底规避跨平台路径兼容问题。


内容的提问来源于stack exchange,提问作者shesh

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.09.01 22:27:20