如何将SCNPhysicsBody定位在scnnode的中心

时间:2016-09-19 16:51:15

标签: ios swift scenekit

嘿,我有scnnode和一个完整的物理机构附加到它,但物理中心/ restpiont位于scnnode的底部。因此,我试图弄清楚如何将物理体定位在节点的中心或至少。我试图找出如何以某种方式控制其定位。到目前为止,Apple Developer并没有帮助我。所以,如果有人知道这将是伟大的。

let NodephysicsBody = SCNPhysicsBody(type: .Dynamic, shape:SCNPhysicsShape(geometry: SCNCapsule(capRadius: 2.0, height: 2.0), options:nil))

这是我唯一的见解,我不知道如何实现它

init(circleOfRadius r: CGFloat, center: CGPoint()

2 个答案:

答案 0 :(得分:1)

我建议尝试SCNPhysicsShape init(shapes:transforms:)初始化程序 - 而不是用几种形状构建物理形状(并使用transforms参数将它们相对于彼此定位),您可能能够传递单个形状和一个将其从父坐标空间的中心偏移的变换。

答案 1 :(得分:0)

举一个完整的例子(我的物理集中在我的.dae动画的基础上,而我需要物理主体在SCNNode质心的中心):

// refNode is the SCNReferenceNode loaded from the .dae animation
 let kCharacterScale = SCNVector3(20.0,20.0,20.0)   //Set the node and physics scales
 let boundingBox = refNode.boundingBox
 let min = boundingBox.min
 let max = boundingBox.max
 let w = (max.x - min.x) 
 let h = (max.y - min.y) 
 let l = (max.z - min.z) 
 let boxShape = SCNBox (width: CGFloat(w) , height: CGFloat(h) , length: CGFloat(l), chamferRadius: 0.0)
 var shape = SCNPhysicsShape(geometry: boxShape, options: [SCNPhysicsShape.Option.scale : kCharacterScale, SCNPhysicsShape.Option.type : SCNPhysicsShape.ShapeType.boundingBox])
 let translate = SCNMatrix4MakeTranslation(0.0, (h*kCharacterScale.y/2.0), 0.0)
 let translateMatrix = NSValue.init(scnMatrix4: translate)
 shape = SCNPhysicsShape.init(shapes: [shape], transforms: [translateMatrix])
        refNode.physicsBody = SCNPhysicsBody(type: .kinematic, shape: shape)