高效节点枚举,SceneKit SWIFT



我的一些动画模型有一个非常大的节点树结构。因此,下面的代码有时可以过滤1000多个节点。如果我这么快,它可能会淹没我的应用程序。有没有办法将rootNode搜索限制在一两个顶层,而不是整个树结构?

self.sceneView.scene.rootNode.enumerateChildNodes { (node, stop) in
if node.name == "myRootNode" {
//This is the node to manipulate
}
}

这是一个如何过滤rootNode(包含场景设置中所有节点的节点(的示例。它将只过滤rootNode。

您可以在任何childNode上运行相同的过滤方法(根据需要(

sceneView.scene?.rootNode.childNodes.filter({ $0.name == "yourNodeName" }).forEach({                
// $0 is your filtered node
print($0.name)                 
})

如果只想搜索顶级,请使用func childNode(withName name: String, recursively: Bool)。如果你想搜索两个级别:

if let node = self.sceneView.scene.rootNode.childNode(withName: "myRootNode", recursively: false) {
// Do whatever you need to do
} else {
for node in self.sceneView.scene.rootNode.children {
if let node = node.childNode(withName: "myRootNode", recursively: false) {
// Do whatever you need to do
break
}
}
}

最新更新