首页 > 解决方案 > 如何对 RealityKit 动画完成执行操作

问题描述

WWDC19 演讲中,他们展示了如何为实体设置动画并在动画完成时执行操作(参考第 12 分钟),如下所示:

let animationController = move(to: flipUpTransform, relativeTo: parent, duration: 0.25, timingFunction: .easeInOut)

animationController.completionHandler {
// Perform some action
}

但看起来他们删除或从未添加 this completionHandler。相反,它们具有isCompleted布尔属性。我是 swift 新手,所以我不知道isCompleted在动画完成后使用它来执行一些操作。我该如何解决这个问题?

标签: swiftanimationarkitrealitykit

解决方案


文档说:

如果您想在动画的某些方面发生时收到警报,请查找 AnimationEvents 中的事件之一。

因此,您可以使用 Combine 来在动画结束时获得通知。所以

let animation = entity.move(to: targetTransform, relativeTo: nil, duration: 1)

arView.scene.publisher(for: AnimationEvents.PlaybackCompleted.self)
       .filter { $0.playbackController == animation }
       .sink(receiveValue: { event in
            / * your completion handler */
        }).store(in: &subscriptions)

推荐阅读