Я загружаю шар в ARSCNView
, используя ARKit/SceneKit
, и шар движется вдоль плоскости пола, пока не остановится, в зависимости от того, какое усилие я прикладываю к мячу.
A 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()
}
}