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

RealityKit动画无确定性完成回调问题 寻求解决方案

RealityKit动画确定性完成回调方案

针对你遇到的动画无法按时完成、依赖延迟执行后续逻辑不可靠的问题,RealityKit提供了两种原生的确定性完成回调方案,完全替代DispatchQueue.main.asyncAfter的临时写法:

方案一:利用AnimationController的completed回调

entity.move(to:)方法会返回一个AnimationController实例,通过它的completed闭包可以监听动画的实际完成事件,这是最直接的方案:

let newTransform = Transform(
    scale: currentTransform.scale,
    rotation: newRotation,
    translation: currentTransform.translation)

// 保存动画控制器实例
let animationController = entity.move(
    to: newTransform,
    relativeTo: anchor,
    duration: duration,
    timingFunction: .easeInOut
)

// 设置完成回调
animationController.completed = { [weak self] in
    // 此处执行动画完成后的后续逻辑,比如启动下一个动画
    self?.startNextAnimation()
}

方案二:使用runAction(_:completion:)方法

通过Action封装动画,再调用entity.runAction(_:completion:),同样可以拿到精准的完成回调:

let newTransform = Transform(
    scale: currentTransform.scale,
    rotation: newRotation,
    translation: currentTransform.translation)

// 创建移动动作
let moveAction = Action.move(
    to: newTransform,
    relativeTo: anchor,
    duration: duration,
    timingFunction: .easeInOut
)

// 执行动作并设置完成回调
entity.runAction(moveAction) { [weak self] in
    // 动画完成后的逻辑
    self?.startNextAnimation()
}

注意事项

  • 两种方案的回调都会在动画真正完成时触发,不受系统负载、动画中断(比如实体被移除、动画被取消)等情况影响,完全替代不可靠的延迟执行方式。
  • 建议使用[weak self]避免循环引用,防止内存泄漏。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.01 13:07:40