首页 文章

如何将两个或多个SCNGeometry / SCNNode组合成一个

提问于
浏览
2

好像我想通过组合一些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)

enter image description here

2 回答

  • 2

    创建一个容器节点,只是一个没有任何几何体的空节点 . 我们称之为“houseNode”,因为这就是你正在构建的东西 .

    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
        })
    
  • 1

    谢谢你的祝福!

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

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

相关问题