Reality Composer导入RealityKit异常 ARView不显示模型
问题描述
尝试实现3D模型锚定到现实世界图像的效果,本次使用的锚定参考图为二维码。制作的AR场景在Reality Composer内运行完全正常,但将该场景导入RealityKit项目后,ARView中无任何内容显示,控制台也未输出相关有效报错信息。
当前实现代码如下:
struct MainARView: UIViewRepresentable { func makeUIView(context: Context) -> ARView { let view = ARView() let session = view.session let config = ARWorldTrackingConfiguration() session.run(config) view.debugOptions = [.showFeaturePoints, .showAnchorOrigins, .showAnchorGeometry] guard let anchor = try? TestObj.loadScene() else { print("Error loading TestObj") return view } view.scene.addAnchor(anchor) return view } func updateUIView(_ view: ARView, context: Context) { } }
排查思路与解决方案
补全ARSession的图像检测配置
这是该问题最高发的原因:Reality Composer中配置的图像锚点逻辑不会自动同步到你自定义的ARSession配置中,当前代码仅初始化了基础的世界追踪配置,没有开启图像检测能力,ARSession根本不会主动识别作为锚点参考的二维码,锚点永远不会触发,自然不会显示任何内容。
需要在运行session前补充如下配置:// 替换为你项目中存储的二维码参考图,以及二维码的实际物理宽度(单位:米) guard let qrCGImage = UIImage(named: "target_qr_code")?.cgImage else { return } let qrReference = ARReferenceImage(qrCGImage, orientation: .up, physicalWidth: 0.05) config.detectionImages = [qrReference] config.maximumNumberOfTrackedImages = 1配置完成后重新运行,扫描对应二维码即可触发锚点显示3D内容,你开启的debug选项也会同步显示识别到的锚点原点、几何轮廓。
打印场景加载的具体错误
当前代码用try?吞掉了场景加载的所有具体错误,无法判断资源是否加载成功。将加载逻辑替换为do-catch写法,拿到具体错误信息排查资源问题:do { let anchor = try TestObj.loadScene() view.scene.addAnchor(anchor) print("场景加载成功") } catch { print("场景加载失败,错误详情:\(error.localizedDescription)") }常见资源问题包括:Reality场景文件未勾选对应Target Membership、文件名拼写错误、场景内引用的素材资源缺失。
检查基础权限与运行线程
- 确认项目Info.plist中已添加
NSCameraUsageDescription字段,填写相机用途描述,否则App无法获取相机权限,ARSession无法正常运行,且部分系统版本下不会抛出明确报错。 - 所有ARView、ARSession相关操作必须在主线程执行,不要在后台线程调用session.run、添加锚点等方法。
- 确认项目Info.plist中已添加
验证锚点触发逻辑
可以给加载的场景锚点添加触发回调,确认锚点是否被ARSession正常识别激活:anchor.actions.onAction = { _ in print("二维码锚点已识别,3D内容已挂载") }如果扫描二维码后该回调没有触发,回到第一步检查图像检测配置、参考图的物理尺寸参数是否设置正确。
内容的提问来源于stack exchange,提问作者Steve
相关产品推荐
相关产品推荐

