我正在尝试在SCNNode上使用SceneKit的applyForce
方法。应用程序检测通过触摸屏何时触摸特定节点,并且应该在节点上施加力;但是,SCNNode不会移动。我已经在SCNNode上正确地将物理设置为dynamic
,它会响应重力。
override func viewDidLoad() {
...
// retrieve the floor node
let floorNode = SCNScene(named: "art.scnassets/floor.dae")
floorNode?.rootNode.position = SCNVector3(x: 0, y: 0, z:-10)
floorNode?.rootNode.physicsBody = SCNPhysicsBody(type: .static, shape: nil)
scene.rootNode.addChildNode(floorNode!.rootNode)
let treeNode = SCNScene(named: "art.scnassets/tree.dae")
treeNode?.rootNode.position = SCNVector3(x: 0, y: 10, z:-10)
treeNode?.rootNode.physicsBody = SCNPhysicsBody(type: .dynamic, shape: nil)
scene.rootNode.addChildNode(treeNode!.rootNode)
...
}
func handleTap(_ gestureRecognize: UIGestureRecognizer) {
...
// check what nodes are tapped
let p = gestureRecognize.location(in: scnView)
let hitResults = scnView.hitTest(p, options: [:])
// check that we clicked on at least one object
if hitResults.count > 0 {
print("A hit!")
// retrieved the first clicked object
let result: AnyObject = hitResults[0]
result.node.physicsBody?.applyForce(SCNVector3(x:10000,y:1,z:1), asImpulse: true)
result.node.physicsBody?.applyTorque(SCNVector4(x:0,y:1,z:0, w:100.0), asImpulse: true)
}
}
答案 0 :(得分:0)
我试图将力应用到子节点(命中测试返回),当我应该将力应用于子节点的父节点时。
我通过.DAE(Collada)文件导入SCNScenes,而SCNScene的rootNode不是模型本身,而是模型的父节点。