是否有方法将RealityKit场景导出为USDZ格式文件?
RealityKit 没有提供和SceneKit完全对等的、直接对整个Scene对象一键导出的公开方法,但可以通过以下可行路径实现USDZ格式导出,按推荐优先级排序:
原生API导出(优先选,系统版本要求iOS 15+ / macOS 12+)
苹果在RealityKit 2.0中加入了USDZExportRequest接口,支持直接导出实体层级结构为USDZ文件,不需要依赖SceneKit桥接。你只需要把场景内需要导出的根实体(通常是所有AnchorEntity的公共父节点,或者你自定义的场景根Entity)传入即可,导出过程会自动保留模型网格、PBR材质、变换层级、内置动画、碰撞体基础信息。
基础调用代码示例:import RealityKit import UniformTypeIdentifiers func exportScene(rootEntity: Entity, saveTo url: URL) async throws { let exportRequest = USDZExportRequest( entities: [rootEntity], exportURL: url ) try await exportRequest.export() }注意:自定义实现的Component、RealityKit特有的
PhysicsBody自定义参数、AudioFileResource这类非USDZ标准支持的内容,不会被写入导出文件。SceneKit桥接导出(兼容更低系统版本)
如果需要适配iOS 15以下的系统版本,可以手动遍历RealityKit场景的Entity层级树,将每个ModelEntity的网格资源、PBR材质参数、位姿信息转换为对应的SCNNode,组装成完整的SCNScene实例后,调用SceneKit自带的导出方法生成USDZ:// 组装完成SCNScene后调用导出 let scene = SCNScene() // ... 填充转换后的SCNNode节点 try scene.write(to: exportURL, options: [.upAxis: "Y"])这个方案的灵活度最高,可以自定义需要导出的内容范围,但需要自己实现MeshResource到SCNGeometry、RealityKit材质到SCNMaterial的映射逻辑,开发量稍大。
工具侧导出(无代码方案)
如果你的场景是通过Reality Composer/Reality Composer Pro搭建的,可以直接在编辑器中选中整个场景的根节点,通过菜单栏的导出功能直接生成USDZ文件,导出的资源兼容性最好,不需要额外写代码处理。
注意:不要使用RealityKit的未公开私有API实现导出,这类实现会触发App Store审核拒审,且跨系统版本兼容性没有保障。
内容的提问来源于stack exchange,提问作者Viktor Maric

