加载含标准抖动行为的USDZ文件致iOS应用崩溃求助
解决Reality Composer添加行为后USDZ加载崩溃的问题
问题原因
崩溃日志里的-[USKObjectPath UTF8String]: unrecognized selector错误,本质是因为你用了Entity.loadModel(named:)方法加载包含Reality Composer行为的USDZ文件。这个方法仅支持加载纯模型USDZ,无法解析Reality Composer添加的行为、动画等额外逻辑(这些逻辑属于RealityKit场景数据范畴,不是纯模型数据)。而未添加行为的USDZ是纯模型,所以能正常加载。
解决方法
将加载代码中的Entity.loadModel(named:)替换为Entity.load(named:),这个方法可以完整加载包含Reality Composer行为、动画的USDZ文件:
let nextAsset = "rook12" do { let asset2Load = try Entity.load(named: nextAsset) // 加载成功后可将实体添加到场景中 // arView.scene.addAnchor(asset2Load) } catch { print("加载失败:\(error)") }
额外验证建议
- 确认从Reality Composer导出USDZ时,已勾选保留所有行为和动画设置
- 如果需要更灵活的控制,也可以放弃用Reality Composer添加行为,改用代码直接给纯模型实体添加抖动动画,示例如下:
// 加载纯模型 let model = try Entity.loadModel(named: "rook12") // 添加循环抖动动画 let shakeAnimation = FromToByAnimation( duration: 0.2, from: Transform(pitch: 0, yaw: 0, roll: -0.1), to: Transform(pitch: 0, yaw: 0, roll: 0.1), repeatMode: .loop, autoreverses: true ) model.playAnimation(shakeAnimation)
内容的提问来源于stack exchange,提问作者user3069232
相关产品推荐
相关产品推荐

