Swift 如何将两个或多个SCN计量/SCN节点合并为一个

Swift 如何将两个或多个SCN计量/SCN节点合并为一个,swift,scenekit,Swift,Scenekit,好像我想通过组合一些SCNBox和SCNPyramid等来创建一些自定义形状,我可以通过设置正确的位置和几何图形将它们组合在一起。然而,我就是找不到一种方法将它们组合成一个单一的单元,可以在物理世界中进行修改或反应。 下面的代码表明,我想创建一个简单的房屋形状SCNNode,并且我希望节点在受到任何碰撞和重力影响时相互连接。 有人能给点提示吗 let boxGeo = SCNBox(width: 5, height: 5, length: 5, chamferRadius: 0) box

好像我想通过组合一些SCNBox和SCNPyramid等来创建一些自定义形状,我可以通过设置正确的位置和几何图形将它们组合在一起。然而,我就是找不到一种方法将它们组合成一个单一的单元,可以在物理世界中进行修改或反应。 下面的代码表明,我想创建一个简单的房屋形状SCNNode,并且我希望节点在受到任何碰撞和重力影响时相互连接。 有人能给点提示吗

let boxGeo = SCNBox(width: 5, height: 5, length: 5, chamferRadius: 0)
    boxGeo.firstMaterial?.diffuse.contents = UIColor.blueColor()

    let box = SCNNode(geometry: boxGeo)
    box.position = SCNVector3Make(0, -2.5, 0)
    scene.rootNode.addChildNode(box)

    let pyramidGeo  = SCNPyramid(width: 7, height: 7, length: 7)
    pyramidGeo.firstMaterial?.diffuse.contents = UIColor.greenColor()

    let pyramid = SCNNode(geometry: pyramidGeo)
    pyramid.position = SCNVector3Make(0, 0, 0)
    scene.rootNode.addChildNode(pyramid)

创建一个容器节点,只是一个没有任何几何体的空节点。让我们称之为“房屋节点”,因为这是您正在构建的

let houseNode = SCNNode()
现在将其他两个节点设为该节点的子节点

houseNode.addChildNode(pyramid)
houseNode.addChildNode(box)
现在,您可以随时在两个组合节点上使用容器节点

编辑:可以通过枚举对容器中对象的几何图形进行更改:

houseNode.enumerateChildNodesUsingBlock({
       node, stop in
       // change the color of all the children
       node.geometry?.firstMaterial?.diffuse.contents = UIColor.purpleColor()
       // I'm not sure on this next one, I've yet to use "physics".
       houseNode.physicsBody?.affectedByGravity = true
    })
谢谢你

使用childNodes方法和下面的代码将其设置为physicsShape,我找到了解决方案

        houseNode.physicsBody = SCNPhysicsBody(type: .Dynamic,
                                      shape: SCNPhysicsShape(node: houseNode,
                                        options: [SCNPhysicsShapeKeepAsCompoundKey: true]))

houseNode.geometry?.firstMaterial?.diffuse.contents=UIColor.purpleColor()houseNode.physicsBody?.affectedByGravity=true如果我想像上面的代码那样更改它的颜色或physicsBody,这就行不通了!我认为这是因为房屋节点的几何和物理形状尚未定义。这就是我想知道的。这个容器对于定位、定向、移动等都很有用。对于你想要的,试试我上面添加的编辑建议。我还没有使用物理引擎,我不确定这部分的建议。这个SCNPhysicsShape与创建为类似SCNBox的正常SCNPhysicsShape不同。因此,这有一个奇怪的现象,即如果有一点附着到运动体类型上,houseNode就不会掉落。还在努力。