SCNNode上的SceneKit applyForce无法正常工作

时间:2017-02-12 02:48:45

标签: physics scenekit

我正在尝试在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)

    }
}

1 个答案:

答案 0 :(得分:0)

我试图将力应用到子节点(命中测试返回),当我应该将力应用于子节点的父节点时。

我通过.DAE(Collada)文件导入SCNScenes,而SCNScene的rootNode不是模型本身,而是模型的父节点。