【问题标题】:SceneKit's node.childNode(withname: recursively:) finds node on iOS 11 but not 9 or 10SceneKit 的 node.childNode(withname: recursively:) 在 iOS 11 上找到 node 但不是 9 或 10
【发布时间】:2018-08-22 19:10:57
【问题描述】:

我有一个相当简单的 SceneKit .scn,包括几个灯光和几个摄像头,以及一个来自同一 .scnassets 包中的 .dae 文件的参考节点。

在 iOS 11(真实或模拟器)上,场景加载正确。在 9(真实,我没有那个版本的模拟器)或 10(真实或模拟器)scene.rootNode.childNode(withName: "MyNodeName", recursively: true) 返回 nil。

加载提供节点“MyNodeName”作为其自身权利的场景的.dae 成功,因此它被复制为资产包的一部分。

我知道一些 SceneKit 功能是最近添加的,但根据文档,这种方法自 iOS 8 以来就一直存在。参考节点的 Load Policy 设置为 Immediately(在 Interface Builder 的节点检查器中)。

什么可以解释这种行为?

编辑添加:

iOS 9 和 10 似乎不会自动加载引用节点,尽管 Interface Builder 中设置了加载策略:

在尝试查找子节点时,在 iOS 10 上:

(lldb) p scene.rootNode.childNodes.map { $0.name }
([String?]) $R1 = 3 values {
  [0] = “Reference node”
  [1] = "Cameras"
  [2] = "Lights"
}
(lldb) p scene.rootNode.childNodes[0].childNodes.map { $0.name }
([String?]) $R2 = 0 values {}
(lldb)

同一时刻,在 iOS 11 上:

(lldb) p scene.rootNode.childNodes.map { $0.name }
([String?]) $R11 = 3 values {
  [0] = “Reference node”
  [1] = "Cameras"
  [2] = "Lights"
}
(lldb) p scene.rootNode.childNodes[0].childNodes.map { $0.name }
([String?]) $R10 = 1 value {
  [0] = “Actual node“
}

有没有办法强制场景加载它的参考节点?对于场景或根节点,我在文档中找不到任何内容。如果没有,场景中的引用节点似乎对 iOS

【问题讨论】:

    标签: ios scenekit


    【解决方案1】:

    看起来,虽然替换/更新 .dae 对于 SceneKit 编辑器或 iOS 11(模拟或真实)来说没有问题,但 iOS 9 和 10 都被节点引用方式中的一些微妙之处弄糊涂了,导致它们找不到它。

    在主场景中删除并重新创建参考节点是解决方案。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2014-10-22
      • 2018-08-01
      • 1970-01-01
      • 2017-12-26
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多