我正在使用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()
}
}
答案 0 :(得分:1)
此属性的默认值为false,但是如果身体不移动且不受任何力的影响,SceneKit的物理模拟可能会自动将其设置为true。
所以看来其他力量仍在影响身体。
您最好测量身体的.velocity
(documentation)来检查它是否在运动。