【问题标题】:SCNScene is nil when loading using `named: `使用 `named: ` 加载时,SCNScene 为 nil
【发布时间】:2017-12-07 00:27:27
【问题描述】:

我正在使用以下代码在 scenekit 中渲染场景,当从 art.scnassests 文件夹加载 dae 文件时,它可以完美运行。

let scene = SCNScene(named: "art.scnassets/idle.dae")

但是我想下载资产并应用它,但出现错误

let documentsURL = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first!
let scene = SCNScene(named: documentsURL.absoluteString+"idle.dae")

文件夹中存在一个名为 idle.dae 的文件。

我收到错误:fatal error: unexpectedly found nil while unwrapping an Optional value

如何加载下载的资产并动态应用?我究竟做错了什么?请问有什么指点吗?我是 iOS 编程的菜鸟。

【问题讨论】:

  • 有人添加和删除了一个答案.. 如果您愿意留下答案,我将不胜感激。您留下了处理和维护资产的最佳实践代码。

标签: ios swift xcode scenekit


【解决方案1】:

除非 iOS 11 有所更改,否则您将无法在 iOS 上在运行时下载和实例化 DAE 文件。它们在构建时使用名为 scntool 的实用程序进行压缩/编译。

您可以改用 Model I/O 支持的文件格式之一吗?请参阅 https://developer.apple.com/videos/play/wwdc2015/602/?time=320 获取原始列表(Alembic .abc、Polygon .ply Triangles .stl、WaveFront .obj)和 https://developer.apple.com/videos/play/wwdc2017/610/ 快速讨论皮克斯的美元(通用场景描述)。

如果您对 DAE 文件感到困惑,Frederik Jacques 在https://the-nerd.be/2014/11/07/dynamically-load-collada-files-in-scenekit-at-runtime/ 上有一篇文章,其中概述了他对 DAE 处理管道进行逆向工程的经验。他的技术允许下载已从服务器上的 DAE 文件处理的 SCN 文件。 另请参阅Load uncompressed collada file using iOS Scene Kit(来自权威来源的 cmets)和https://forums.developer.apple.com/thread/38010

【讨论】:

  • 我可以搬到scn。我可以实时下载和应用scn资产吗
  • 如果您遵循 Frederik Jacques 的流程,您可以实时下载和使用 .SCN 文件。您需要在 Mac 上运行 scntool 以将每个 .DAE 文件转换为 .SCN 格式。使用模型 I/O 支持的格式或 Pixar USD 会更简单。
  • 如果你有这方面的 swift 资源,请把它们放在这里 :) 谢谢
猜你喜欢
  • 2018-03-12
  • 1970-01-01
  • 2015-09-29
  • 1970-01-01
  • 2017-09-12
  • 2014-08-05
  • 1970-01-01
  • 2017-11-27
  • 1970-01-01
相关资源
最近更新 更多