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

Unity iOS项目中PDF文件打开与查看问题求助

在Unity iOS项目中正确打开StreamingAssets内的PDF文件

嘿,我看你在Unity iOS项目里打开PDF时遇到了瓶颈——编辑器里可能能用,但到了iOS真机上就歇菜了对吧?这其实是iOS的沙箱机制和Unity StreamingAssets的特殊存储方式导致的,我来给你拆解下问题和解决方案:

为啥原来的代码在iOS上不工作?

  • iOS会把StreamingAssets里的内容打包进App的Bundle中,这个位置是只读的,而且Application.OpenURL没办法直接访问Bundle内部的文件路径。
  • 你之前用的file://路径格式在iOS上不适用,Bundle内的文件有专门的访问规则,直接拼路径根本找不到文件。

正确的解决思路:先复制再打开

我们得先把StreamingAssets里的PDF复制到iOS允许读写的目录(比如Application.persistentDataPath),然后再打开这个复制后的文件,具体代码如下:

第一步:编写文件复制工具方法

先写一个负责复制PDF的方法,兼顾编辑器和iOS平台的差异:

using System.IO;
using UnityEngine;
using UnityEngine.Networking;

public class PDFViewer : MonoBehaviour
{
    private const string PdfFileName = "Del1.pdf";

    // 将StreamingAssets中的PDF复制到可读写的持久化目录
    private void CopyPdfToPersistentPath()
    {
        string sourcePath = Path.Combine(Application.streamingAssetsPath, PdfFileName);
        string destPath = Path.Combine(Application.persistentDataPath, PdfFileName);

        // 避免重复复制,先检查目标文件是否存在
        if (!File.Exists(destPath))
        {
#if UNITY_IOS && !UNITY_EDITOR
            // iOS上必须用UnityWebRequest读取StreamingAssets内容
            using (UnityWebRequest www = UnityWebRequest.Get(sourcePath))
            {
                www.SendWebRequest();
                // 等待请求完成
                while (!www.isDone) { }

                if (www.result == UnityWebRequest.Result.Success)
                {
                    File.WriteAllBytes(destPath, www.downloadHandler.data);
                }
                else
                {
                    Debug.LogError($"复制PDF失败:{www.error}");
                }
            }
#else
            // 编辑器和其他平台直接复制文件
            File.Copy(sourcePath, destPath);
#endif
        }
    }
}

第二步:修改按钮点击事件

把你的按钮点击方法改成先复制再打开:

public void OnDel1ButtonClick()
{
    CopyPdfToPersistentPath();
    string targetPdfPath = Path.Combine(Application.persistentDataPath, PdfFileName);
    // iOS上打开本地文件需要加上file://前缀
    Application.OpenURL($"file://{targetPdfPath}");
}

额外要注意的点

  • 确保你的PDF文件确实放在了StreamingAssets文件夹里,并且在Unity中文件的导入设置没有问题(默认设置就行,不用额外调整)。
  • 测试时一定要用iOS真机或者模拟器,编辑器的文件路径和真机完全不同,没法验证iOS上的效果。
  • 如果还是打不开,可能需要在Info.plist里添加PDF文件的关联配置,但一般系统自带的PDF阅读器会自动处理,不用额外操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.22 09:27:20