SCNPhysicsBody上的SceneKit isResting属性始终返回false

时间:2019-05-03 11:16:25

标签: ios scenekit arkit scnnode

我正在使用ARSCNView将球加载到ARKit/SceneKit中,并且该球沿着地板移动直到停止为止,具体取决于我对球施加的作用力。

SCNNode具有用于检测节点何时停止移动并通过使用以下命令将其isResting属性设置为true的属性:

myNode.physicsBody?.isResting

我已设置myNode的物理身体使用以下方式注册休息:

myNodesPhysicsBody.allowsResting = true

我的球类中有一个函数应使用以下命令检测球何时静止:

func removeBowlingBallWhenNotMoving() {
        guard let bowlingBallNode = bowlingBallNode else {return}
        guard let resting = bowlingBallNode.physicsBody?.isResting else  {return} // I know I can combine these guard statements they're just here for easier debugging
        print("Resting: \(resting)") // This always returns false even when the node has visually stopped moving.
        if resting {
            performFadeOutOnBowlingBallWith(duration: Constants.bowlingBallFadeOutDuration)
        }
    }

didSimulatePhysicsAtTime 中调用:

extension ViewController: ARSCNViewDelegate {
    func renderer(_ renderer: SCNSceneRenderer, didSimulatePhysicsAtTime time: TimeInterval) {
        bowlingBall.removeBowlingBallWhenNotMoving()
    }
}

1 个答案:

答案 0 :(得分:1)

根据documentation

  

此属性的默认值为false,但是如果身体不移动且不受任何力的影响,SceneKit的物理模拟可能会自动将其设置为true。

所以看来其他力量仍在影响身体。

您最好测量身体的.velocitydocumentation)来检查它是否在运动。