如何在ARKit图像检测中仅跟踪单个图像,触发didAddNode重复调用
解决AR图像跟踪重复触发didAddNode的问题
核心思路
每次用户切换图像时,动态更新跟踪配置,只让当前目标图像被跟踪,同时重置AR会话。这样ARKit会把新切换进来的图像当成首次检测,自然就会触发didAddNode,不管之前有没有跟踪过这张图。
具体操作步骤
- 先给每张跟踪图像做个标识(比如用名称或者UUID),用来记录当前选中的是哪一张
- 用户滑动切换图像时,按以下流程操作:
- 先暂停当前的AR会话
- 新建一个
ARImageTrackingConfiguration,只把当前选中的那一张ARReferenceImage加到trackingImages数组里 - 调用
session.run(newConfig, options: [.resetTracking, .removeExistingAnchors])——这两个参数很关键:.resetTracking会重置ARKit的跟踪状态,.removeExistingAnchors会把之前所有的锚点和对应的节点都清掉
- 之后在
didAddNode里正常添加视频平面即可,每次切换后都是全新的跟踪会话,首次检测到图像就会触发这个方法
额外注意事项
- 提前把所有需要用的图像都转换成
ARReferenceImage存好,切换时直接取用就行,别每次都重新加载,影响流畅度 - 如果有不需要跟着锚点走的全局元素(比如固定在屏幕上的UI),别加到锚点对应的节点下面,直接挂到
sceneView.scene.rootNode上 - 切换图像时记得把之前的AVPlayer暂停,避免后台播放
内容的提问来源于stack exchange,提问作者Sai Balaji
相关产品推荐
相关产品推荐

