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
相关产品推荐
相关产品推荐

