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