AnimationPlaybackController只有resume()、pause()和stop()方法



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)

最新更新