2017-02-12 2 views
0

SCNNode에서 applyForce SceneKit 메서드를 사용하려고합니다. 응용 프로그램은 특정 노드가 터치 스크린을 통해 터치 될 때이를 감지하고 노드에 강제 적용해야합니다. 그러나 SCNNode는 이동하지 않습니다. 저는 물리학을 SCNNode에서 dynamic으로 적절하게 설정했으며 중력에 반응합니다.SCNNode의 SceneKit applyForce가 작동하지 않습니다.

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

강제로 자식 노드의 부모 노드에 적용해야하는 자식 노드 (히트 테스트에서 반환)에 강제 적용하려고했습니다.

.DAE (Collada) 파일을 통해 SCNScenes를 가져오고 있으며 SCNScene의 rootNode는 모델 자체가 아니라 모델의 부모입니다.