如何在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
相关产品推荐
相关产品推荐

