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

Swift中如何从Documents目录加载GLB模型到SCNScene?

加载Documents文件夹中的.glb文件到SCNScene

一、模仿UIImage的加载方式实现.glb文件加载

你可以沿用获取Documents路径的逻辑,通过拼接.glb文件的URL来加载SCNScene,只是初始化SCNScene的方式需要适配其API要求(需处理可能的加载错误)。

先补全你提供的UIImage加载代码的语法问题:

let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
let nsUserDomainMask    = FileManager.SearchPathDomainMask.userDomainMask
let paths               = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
if let dirPath          = paths.first {
    let imageURL = URL(fileURLWithPath: dirPath).appendingPathComponent("Image2.png")
    let image    = UIImage(contentsOfFile: imageURL.path)
}

对应加载.glb文件到SCNScene的代码如下:

let nsDocumentDirectory = FileManager.SearchPathDirectory.documentDirectory
let nsUserDomainMask    = FileManager.SearchPathDomainMask.userDomainMask
let paths               = NSSearchPathForDirectoriesInDomains(nsDocumentDirectory, nsUserDomainMask, true)
if let dirPath          = paths.first {
    // 拼接Documents文件夹中目标.glb文件的URL
    let glbURL = URL(fileURLWithPath: dirPath).appendingPathComponent("你的文件名.glb")
    // 加载SCNScene,处理加载过程中可能出现的错误
    do {
        let scene = try SCNScene(url: glbURL, options: nil)
        // 成功加载后可在此处使用scene
    } catch {
        print(".glb文件加载失败:\(error.localizedDescription)")
    }
}

二、能否用SCNScene(named: "latest.glb")加载?

不能用这个方法加载Documents文件夹内的.glb文件。

原因是:SCNScene(named:)默认仅在**应用主Bundle(即项目打包时内置的资源文件)**中查找目标文件,而Documents文件夹属于应用沙盒的动态存储目录,不在主Bundle的搜索范围内,因此该方法无法定位到此处的文件。

如果你的.glb文件是项目打包时就添加到工程中(并勾选了对应Target)的内置资源,那可以用SCNScene(named: "latest.glb")加载;但如果是后续下载或保存到Documents的文件,必须使用前面的URL路径方式加载。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.02 21:06:06