3

我正在尝试在 Apple 的新 ARKit 中旋转一个虚拟对象。我希望对象无限旋转直到它停止。我尝试了多种方法,例如:

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

...但似乎没有任何效果。我已经设置了虚拟对象,只需按一下按钮,我就希望对象旋转。
我怎样才能做到这一点?

4

3 回答 3

2

请记住,ARKit 不是一种渲染/显示技术。ARKit 为您做的主要事情是进行设置,以便您选择的任何图形技术(SceneKit、Unity、您自己的自定义引擎等)都可以轻松地在相机源上以一种提供良好 AR 体验的方式进行渲染。因此,任何关于如何绘制或动画 AR 内容的问题实际上都是关于您使用哪种显示技术的问题。

在这种情况下,它看起来像 SceneKit。您是否查看过 SceneKit 的(诚然相当稀疏的)文档,其中包括其几种制作动画的方法?今年(和过去几年)的SceneKit WWDC 会话中还附加了示例代码,这些示例代码展示了......嗯,很多东西,但其中有连续的旋转动画。

于 2017-06-19T03:06:43.237 回答
2

所有“传统”技术都可以在 AR World 中旋转对象。例如,您可以使用 CABasicAnimation(repeatCount = .infinity),或者您可以使用 SCNAction(repeatForever)。Bellow 是围绕 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")

停止:

node.removeAction(forKey: "myrotate")
于 2017-07-27T06:56:14.137 回答
1

它非常简单,您只需添加并运行一个动作来旋转这样的虚拟对象

    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
于 2019-01-10T08:00:51.240 回答