AR应用Anchor检测在iOS14.7及以上版本运行异常问题求助
问题根因
iOS 14.5之后RealityKit对Reality Composer项目的默认锚点管理逻辑做了迭代,默认开启了「重复识别自动重载场景」「锚点丢失自动移除内容」的规则,你当前直接加载RC锚点添加到场景使用的是默认配置,所以会出现高版本系统的适配问题。
可行解决方案
方案1:直接修改Reality Composer项目配置(无需改代码,优先尝试)
- 打开你的
Enigme1RC项目,选中绑定图像锚点的Debut场景 - 右侧属性面板找到「行为」分类,取消勾选识别到目标时重载场景选项
- 找到「锚点设置」分类,勾选锚点丢失时保留场景内容选项
- 导出RC项目替换工程内的原有文件即可生效
方案2:代码层面手动接管锚点管理(改RC无效时使用)
替换你现有ViewController的代码即可:
import RealityKit import ARKit class ViewController: UIViewController { @IBOutlet var arView: ARView! // 全局持有RC锚点避免被系统自动释放 var debutAnchor: Enigme1.Debut? override func viewDidLoad() { super.viewDidLoad() // 自定义ARSession配置,覆盖默认规则 let trackingConfig = ARImageTrackingConfiguration() guard let referenceImgs = ARReferenceImage.referenceImages(inGroupNamed: "AR Resources", bundle: nil) else { return } trackingConfig.trackingImages = referenceImgs // 单图像识别场景设最大追踪数为1,避免误识别触发重复加载 trackingConfig.maximumNumberOfTrackedImages = 1 trackingConfig.isAutoFocusEnabled = true arView.session.run(trackingConfig, options: [.removeExistingAnchors, .resetTracking]) // 加载RC锚点 guard let anchor = try? Enigme1.loadDebut() else { return } debutAnchor = anchor // 手动指定锚点规则,关闭RC默认的自动管理 anchor.anchoring = AnchoringComponent(.image(group: "AR Resources", name: "你绑定的参考图像名称")) arView.scene.anchors.append(anchor) // 监听锚点状态,手动控制内容显隐而非直接移除 arView.scene.subscribe(to: SceneEvents.AnchoredStateChanged.self, on: anchor) { [weak self] event in guard let self = self else { return } // 锚点识别到显示内容,已加载过不会重复重启 self.debutAnchor?.isEnabled = event.isAnchored }.store(in: &arView.scene) } }
补充注意事项
- Xcode 13.1对应iOS 15 SDK,建议将项目部署目标设置为iOS 14.0,同时Reality Composer导出时选择兼容iOS 14.0及以上版本
- 工程内的参考图像保证分辨率≥300dpi、对比度足够、无重复纹理,可以进一步降低误识别概率
内容的提问来源于stack exchange,提问作者bob thesponge
相关产品推荐
相关产品推荐

