Если вы просто хотите изменить положение своего узла 60 раз в секунду, то вы можете просто реализовать функцию рендеринга updateAtTime для ARSCNViewDelegate. Эта функция должна вызываться примерно 60 раз в секунду.
Глупая версия может быть
extension ViewController: ARSCNViewDelegate, ARSessionDelegate {
func renderer(_ renderer: SCNSceneRenderer, updateAtTime time: TimeInterval) {
yourNode.simdWorldPosition.z -= 0.01
}
. Это приведет к перемещению ранее определенного yourNode
1 см в направлении -Z 60 раз в секунду. Вы можете написать это с помощью итерационного итератора для l oop с любыми позиционными действиями, которые вы хотите.
Вы также можете сделать реальную анимацию с чем-то вроде
let startingZ = node.simdWorldPosition.z
let animation = CABasicAnimation(keyPath: "simdWorldPosition.z")
animation.fromValue = startingZ
animation.toValue = startingZ - 2.0
animation.duration = 1
animation.autoreverses = true
animation.repeatCount = .infinity
yourNode.addAnimation(animation, forKey: "backAndForth")
Или вы можете использовать SCNActions как показано здесь: Добавление анимации к 3D-моделям в ARKit