如何在iOS场景中将多个节点加入一个节点

Ank*_*arg 1 ios scenekit

正如我们在下图中看到的,场景图中有多个节点。要求是我想将这些节点添加到一个节点中,如图 2 所示。所以在场景图中,我将有一个包含多个节点的节点(椅子)

在此处输入图片说明

                      Image1
Run Code Online (Sandbox Code Playgroud)

在此处输入图片说明

                    Image2
Run Code Online (Sandbox Code Playgroud)

Jor*_*dan 5

您创建一个父节点,然后将所有节点添加为子节点。

IE:

var nodes: [SCNNode] = getMyNodes()

var parentNode = SCNNode()
parentNode.name = "chair"

for node in nodes {
    parentNode.addChildNodes(node)
}
Run Code Online (Sandbox Code Playgroud)

当您对节点应用更新时,更新也会下推到子节点,例如:

parentNode.transform = SCNMatrix4MakeTranslation(0, 0.5, 1.2)
Run Code Online (Sandbox Code Playgroud)

将对附加到 的所有子项应用相同的转换变换parentNode

您可以使用以下方法访问特定的孩子:

parentNode.childNode(withName: nameOfChildNode, recursively: true)
Run Code Online (Sandbox Code Playgroud)

并使用以下方法获取任何孩子的父母:

myChildNode.parent
Run Code Online (Sandbox Code Playgroud)

编辑:

如果您从场景文件导入,您仍然可以轻松地以编程方式访问您的节点:

let scene = SCNScene(named: "myScene.scn")

func getMyNodes() -> [SCNNode] {
    var nodes: [SCNNode] = [SCNNode]()
    for node in scene.rootNode.childNodes {
        nodes.append(node)
    }
    return nodes
}
Run Code Online (Sandbox Code Playgroud)

顺便说一句,这意味着您可以忽略上述大部分内容并将其myScene.rootNode用作parent节点。