Estoy tratando de hacer que un VirtualObject, en el nuevo ARKit de Apple, gire. Quiero que el objeto gire infinitamente hasta que se detenga. He intentado varias cosas, como:

angleDegrees = Int(((object.eulerAngles.y) * 180) / Float.pi) % 360
object.eulerAngles.y = initialObjectAngle + amoutnToSpinPerSpin

... Pero nada parecía funcionar. Tengo la configuración del objeto virtual y con solo presionar un botón, me gustaría que el objeto gire.
¿Cómo puedo lograr eso?

3
Noah H 18 jun. 2017 a las 07:24

3 respuestas

La mejor respuesta

Recuerde que ARKit no es una tecnología de representación / visualización. Lo principal que ARKit hace por usted es configurar las cosas para que cualquier tecnología de gráficos que elija (SceneKit, Unity, su propio motor personalizado, etc.) pueda renderizar fácilmente sobre la alimentación de la cámara de una manera que genere buenas experiencias de AR. Por lo tanto, cualquier pregunta sobre cómo dibujar o animar contenido AR es realmente una pregunta sobre la tecnología de visualización que esté utilizando.

Eso se parece a SceneKit en este caso. ¿Ha mirado la documentación para SceneKit, que incluye varias formas de hacer animación? También hay un código de muestra adjunto a SceneKit WWDC sessio n de este año (y años anteriores) que demuestra ... bueno, un montón de cosas, pero hay animaciones de giro continuas allí.

2
rickster 19 jun. 2017 a las 03:06

Es bastante simple, solo tiene que agregar y ejecutar una acción para rotar un objeto virtual como este

    let rotateOne = SCNAction.rotateBy(x: 0, y: CGFloat(Float.pi), z: 0, duration: 5.0)
   // let hoverUp = SCNAction.moveBy(x: 0, y: 0.2, z: 0, duration: 2.5) // to hover up  with rotation
   // let hoverDown = SCNAction.moveBy(x: 0, y: -0.2, z: 0, duration: 2.5) // to hover down with rotation
   // let hoverSequence = SCNAction.sequence([hoverUp, hoverDown]) // to do this in sequence first it will hover up and then hover down
   // let rotateAndHover = SCNAction.group([rotateOne, hoverSequence]) // rotation with hovering
   // let repeatForever = SCNAction.repeatForever(rotateAndHover) // to rotate the object continuously with hovering
    let repeatForever = SCNAction.repeatForever(rotateOne) // to rotate the object continuously without hovering
    node.runAction(repeatForever) // here node is your virtual object
1
Diksha235 10 ene. 2019 a las 08:00

Todas las técnicas "tradicionales" pueden rotar un objeto en AR World. Por ejemplo, puede usar CABasicAnimation (con repeatCount = .infinity), o puede usar SCNAction (con repeatForever). A continuación se muestra un código simple para rotar el nodo del objeto alrededor del eje y:

let action = SCNAction.rotateBy(x: 0, y: CGFloat(2 * Double.pi), z: 0, duration: 10)
let repAction = SCNAction.repeatForever(action)
node.runAction(repAction, forKey: "myrotate")

Para detener:

node.removeAction(forKey: "myrotate")
2
Tony 27 jul. 2017 a las 06:56