如何使用 Swift 4 在 ARKit 中旋转虚拟对象
How to rotate a Virtual Object in ARKit with Swift 4
我正在尝试在 Apple 的新 ARKit 中制作一个 VirtualObject 旋转。我想让物体无限旋转直到停止。我尝试了多种方法,例如:
angleDegrees = Int(((object.eulerAngles.y) * 180) / Float.pi) % 360
object.eulerAngles.y = initialObjectAngle + amoutnToSpinPerSpin
...但似乎没有任何效果。我设置了虚拟对象并按下按钮,我希望对象旋转。
我怎样才能做到这一点?
请记住,ARKit 不是渲染/显示技术。 ARKit 为您做的主要事情是进行设置,以便您选择的任何图形技术——SceneKit、Unity、您自己的自定义引擎等——都可以轻松地在相机源上渲染,从而带来良好的 AR 体验。因此,任何关于如何绘制或动画化 AR 内容的问题实际上都是关于您使用的显示技术的问题。
在这种情况下看起来像 SceneKit。您是否看过今年(以及过去几年)的(诚然相当稀疏)documentation for SceneKit, which includes its several ways to do animation? There's also sample code attached to the SceneKit WWDC session,它展示了......好吧,很多东西,但其中有连续旋转的动画。
所有 "traditional" 技术都可以在 AR 世界中旋转对象。例如,您可以使用 CABasicAnimation(具有 repeatCount = .infinity),或者您可以使用 SCNAction(具有 repeatForever)。波纹管是围绕轴 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")
这很简单,您只需添加 运行 一个动作来旋转这样的虚拟对象
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
我正在尝试在 Apple 的新 ARKit 中制作一个 VirtualObject 旋转。我想让物体无限旋转直到停止。我尝试了多种方法,例如:
angleDegrees = Int(((object.eulerAngles.y) * 180) / Float.pi) % 360
object.eulerAngles.y = initialObjectAngle + amoutnToSpinPerSpin
...但似乎没有任何效果。我设置了虚拟对象并按下按钮,我希望对象旋转。
我怎样才能做到这一点?
请记住,ARKit 不是渲染/显示技术。 ARKit 为您做的主要事情是进行设置,以便您选择的任何图形技术——SceneKit、Unity、您自己的自定义引擎等——都可以轻松地在相机源上渲染,从而带来良好的 AR 体验。因此,任何关于如何绘制或动画化 AR 内容的问题实际上都是关于您使用的显示技术的问题。
在这种情况下看起来像 SceneKit。您是否看过今年(以及过去几年)的(诚然相当稀疏)documentation for SceneKit, which includes its several ways to do animation? There's also sample code attached to the SceneKit WWDC session,它展示了......好吧,很多东西,但其中有连续旋转的动画。
所有 "traditional" 技术都可以在 AR 世界中旋转对象。例如,您可以使用 CABasicAnimation(具有 repeatCount = .infinity),或者您可以使用 SCNAction(具有 repeatForever)。波纹管是围绕轴 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")
这很简单,您只需添加 运行 一个动作来旋转这样的虚拟对象
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