You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何在RealityKit中订阅AnimationController并监听动画完成事件

实现动画结束事件通知的方法

在RealityKit中,Entity.move(to:relativeTo:duration:)方法会返回一个AnimationController实例,你可以通过这个控制器监听PlaybackCompleted事件,从而在动画结束时得到通知。

修改后的代码如下:

struct ImmersiveGameView: View {
    let entity = Utils.generateBall(color: .green) //生成球体Entity
    let viewModel = ImmersiveGameViewModel()

    var body: some View {
        RealityView { content in
            entity.setPosition(SIMD3(0, 1, -0.7), relativeTo: nil)
            content.add(entity)
        }
        .gesture(SpatialTapGesture().targetedToAnyEntity().onEnded({ value in
            var transform = Transform()
            transform.translation.z = entity.position.z - 10
            transform.translation.x = entity.position.x
            transform.translation.y = entity.position.y
            
            // 调用move方法并获取动画控制器
            let animationController = value.entity.move(
                to: transform,
                relativeTo: nil,
                duration: 2
            )
            
            // 监听动画完成事件
            animationController.events.playbackCompleted.onReceive { _ in
                // 这里写入动画结束后的逻辑
                print("动画已完成!")
                viewModel.handleAnimationFinish()
            }
        }))
    }
}

// 给ViewModel添加对应的处理方法(示例)
extension ImmersiveGameViewModel {
    func handleAnimationFinish() {
        // 执行动画结束后的业务操作
    }
}

关键说明:

  • AnimationController是动画的控制载体,通过它的events.playbackCompleted属性可以订阅动画完成事件。
  • 动画播放完成时,onReceive闭包会被触发,你可以在这里更新UI状态、调用ViewModel方法或执行其他业务逻辑。
  • 如果需要监听动画暂停、中断等其他事件,同样可以通过animationController.events下的对应属性添加监听。

内容的提问来源于stack exchange,提问作者Fred Novack

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.02 20:27:05