使用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
相关产品推荐
相关产品推荐

