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

使用RealityKit无法播放USDZ动画的问题求助

解决RealityKit中USDZ动画不播放的问题

先给你修正后的可运行代码,再拆解问题根源:

@IBOutlet var arView: ARView!

override func viewDidLoad() {
    super.viewDidLoad()
    
    // 移除重复创建ARView的冗余代码,直接使用IBOutlet关联的视图
    arView.cameraMode = .nonAR
    
    let newAnchor = AnchorEntity(world: .zero)
    guard let newEnt = try? Entity.load(named: "Vintage Toy Robot") else {
        print("模型加载失败,请检查文件名或文件路径")
        return
    }
    newAnchor.addChild(newEnt)
    arView.scene.addAnchor(newAnchor)
    
    // 递归遍历所有实体层级,找到并播放动画
    playAllAnimations(for: newEnt)
}

// 递归查找所有实体的动画并循环播放
private func playAllAnimations(for entity: Entity) {
    // 播放当前实体的动画
    for anim in entity.availableAnimations {
        entity.playAnimation(anim.repeat(duration: .infinity), 
                             transitionDuration: 1.25, startsPaused: false)
        print("正在播放动画: \(anim.name)")
    }
    
    // 递归处理所有子实体
    for child in entity.children {
        playAllAnimations(for: child)
    }
}

问题拆解:

  • 重复创建ARView:你已经通过@IBOutlet关联了Storyboard中的ARView,却又在代码里重新实例化并添加到视图,这会破坏原有的视图关联逻辑,属于冗余操作,直接移除即可。
  • 动画不在根实体:绝大多数USDZ模型的动画并非挂载在根Entity上,而是嵌套在子层级的实体中。你之前只遍历了根实体的availableAnimations,自然找不到动画资源,必须递归遍历所有子实体才能定位到动画。
  • 缺少错误处理:用try!强制解包会隐藏模型加载失败的问题,换成guard let + try?能及时排查文件名错误、文件缺失等异常情况。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 20:35:16