SceneKit的node.childNode(withname:递归:)在iOS 11上找到节点,但不是9或10

时间:2018-03-14 09:58:42

标签: ios scenekit

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

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

加载提供节点" MyNodeName"的.dae因为它自己的权利成功,所以它被复制为资产包的一部分。

我知道一些SceneKit功能是最近添加的,但根据文档,此方法自iOS 8开始就存在。参考节点的Load Policy设置为Immediately(在Interface Builder中# 39; s节点检查员)。

有什么可以解释这种行为?

已编辑添加:

尽管Interface Builder中的加载策略设置如此,iOS 9和10似乎还没有自动加载参考节点:

在尝试查找子节点时,在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<非常有用。 11。

1 个答案:

答案 0 :(得分:0)

似乎虽然替换/更新.dae对于SceneKit编辑器或iOS 11(模拟或真实)没有问题,但iOS 9和10都被引用节点的方式所迷惑,导致他们找不到它。

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