AnimationPlaybackController
在RealityKit中只有resume()
、pause()
和stop()
方法。
func move(to:relativeTo:duration:timingFunction:)
如何循环或重复资源的动画?
您可以使用
playAnimation(_:transitionDuration:startsPaused:)
实例方法在RealityKit中无限循环或重复一定次数的资产动画(但当您使用move(to:relativeTo:duration:timingFunction:)
等方法时,我看不到循环选项(:
@discardableResult
func playAnimation(_ animation: AnimationResource,
transitionDuration: TimeInterval = 0,
startsPaused: Bool = false) -> AnimationPlaybackController
以下是无限动画循环在真实代码中的样子:
let model = try ModelEntity.load(named: "guitarist")
let anchor = AnchorEntity(world: [2, 0, 3])
anchor.children.append(model)
arView.scene.anchors.append(anchor)
model.playAnimation(model.availableAnimations[0].repeat(),
transitionDuration: 0.5,
startsPaused: false)
您也可以使用循环一定次数(例如,9次(。
model.playAnimation(model.availableAnimations[0].repeat(count: 9),
transitionDuration: 1.0,
startsPaused: true)
或者使用Int.max
值,您可以寻址9.2 Quintilion次来重复动画:
model.playAnimation(model.availableAnimations[0].repeat(count: .max),
transitionDuration: 1.0,
startsPaused: true)
提到的move(to:relativeTo:duration:timingFunction:)
方法可以这样使用:
model.move(to: .init(1.0), relativeTo: nil,
duration: 10,
timingFunction: .default).resume() // No loop options
替代方法
作为一种变通方法,您可以使用物理学来实现一个永恒的循环旋转:
model.components[PhysicsBodyComponent.self] = .init()
model.components[PhysicsMotionComponent.self] = .init()
model.physicsBody?.massProperties.mass = 0.0
model.physicsMotion?.angularVelocity.y = 1.0
model.generateCollisionShapes(recursive: true)