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

Unity iOS平台如何打开PDF文件?Android转iOS适配求助

Unity iOS 本地PDF文件打开解决方案

针对Unity适配iOS时无法打开本地PDF的问题,以下是两种可行的实现方案:

方案一:直接使用Unity的Application.OpenURL(简易版)

iOS端的Application.OpenURL支持file://协议的本地文件路径,但需注意路径格式正确性,仅对部分场景有效(如文件在沙盒可访问目录)。

示例代码:

using UnityEngine;
using System.IO;

public class PDFOpener : MonoBehaviour
{
    public void OpenPDF(string fileName)
    {
        #if UNITY_IOS && !UNITY_EDITOR
            // 拼接沙盒持久化路径下的PDF文件路径
            string pdfPath = Path.Combine(Application.persistentDataPath, fileName);
            // 转换为iOS支持的file://格式
            string iosUrl = "file://" + pdfPath;
            Application.OpenURL(iosUrl);
        #elif UNITY_ANDROID
            UnityAndroidOpenUrl.AndroidOpenUrl.OpenFile(Path.Combine(Application.persistentDataPath, fileName), "application/pdf");
        #endif
    }
}

注意:该方法可能因iOS版本或文件位置限制无法唤起系统PDF阅读器,若失效建议使用方案二。

方案二:编写iOS原生插件(稳定兼容版)

通过调用iOS原生的QLPreviewController(QuickLook框架)实现PDF预览与打开,兼容性更好,支持分享、打印等扩展操作。

步骤1:创建iOS原生代码文件

在Unity项目的Assets/Plugins/iOS目录下创建两个文件:

PDFOpener.h

#import <Foundation/Foundation.h>
#import <QuickLook/QuickLook.h>

@interface PDFOpener : NSObject
+ (void)openPDFAtPath:(NSString *)filePath;
@end

PDFOpener.m

#import "PDFOpener.h"

@implementation PDFOpener

+ (void)openPDFAtPath:(NSString *)filePath {
    NSURL *pdfUrl = [NSURL fileURLWithPath:filePath];
    
    QLPreviewController *previewVC = [[QLPreviewController alloc] init];
    previewVC.dataSource = self;
    previewVC.currentPreviewItemIndex = 0;
    
    // 获取当前Unity的根视图控制器
    UIViewController *rootVC = [UIApplication sharedApplication].keyWindow.rootViewController;
    [rootVC presentViewController:previewVC animated:YES completion:nil];
}

// QuickLook数据源实现
+ (NSInteger)numberOfPreviewItemsInPreviewController:(QLPreviewController *)controller {
    return 1;
}

+ (id<QLPreviewItem>)previewController:(QLPreviewController *)controller previewItemAtIndex:(NSInteger)index {
    static NSURL *currentPDFUrl;
    return currentPDFUrl ?: (currentPDFUrl = [NSURL fileURLWithPath:filePath]);
}

@end

步骤2:编写Unity C#调用脚本

创建C#脚本,通过DllImport调用原生插件方法:

using UnityEngine;
using System.Runtime.InteropServices;
using System.IO;

public class PDFHandler : MonoBehaviour
{
    [DllImport("__Internal")]
    private static extern void openPDFAtPath(string filePath);

    public void OpenLocalPDF(string fileName)
    {
        string pdfFullPath = Path.Combine(Application.persistentDataPath, fileName);
        
        #if UNITY_IOS && !UNITY_EDITOR
            openPDFAtPath(pdfFullPath);
        #elif UNITY_ANDROID
            UnityAndroidOpenUrl.AndroidOpenUrl.OpenFile(pdfFullPath, "application/pdf");
        #else
            Debug.LogWarning("Unsupported platform");
        #endif
    }
}

步骤3:配置iOS导出设置

在Unity的Player Settings中:

  1. 切换到iOS平台
  2. 进入Other Settings -> Framework & Libraries
  3. 添加QuickLook.framework(确保原生代码能正常调用QuickLook功能)

额外注意事项

  • 如果PDF文件在StreamingAssets目录,需先将其复制到persistentDataPath再打开(iOS包内文件为只读,原生控制器无法直接访问)
  • 确保PDF文件路径无中文或特殊字符,建议使用英文文件名

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.17 04:13:07