如何切换MutableRuntimeReferenceImageLibrary?切换后追踪事件未更新
AR参考库切换后追踪事件无响应的排查与修复
我通过以下函数切换AR参考库,日志显示库切换成功、标记已添加,但后续trackedImagesChanged事件完全没有触发,无法追踪新库中的标记:
public void switchImageLibrary(int curLibIndex) { trackImageManager.trackedImagesChanged -= OnTrackedImagesChanged; var newLib = curLibIndex == 0 ? "QR Library" : "Image Library"; LogHandler.Instance.Log("Switching Library to :- " + newLib); trackImageManager.enabled = false; var lib = curLibIndex == 0 ? QRCodeImageLibrary : ImageAccessPointLibrary; trackImageManager.referenceLibrary = trackImageManager.CreateRuntimeLibrary(lib) as MutableRuntimeReferenceImageLibrary; trackImageManager.enabled = true; trackImageManager.trackedImagesChanged += OnTrackedImagesChanged; LogHandler.Instance.Log("Current Marker Count : " + trackImageManager.referenceLibrary.count); LogHandler.Instance.Log("Current Library name " + trackImageManager.referenceLibrary.ToString()); for (int i = 0; i < trackImageManager.referenceLibrary.count; i++) { LogHandler.Instance.Log("Reference Added In Library : " + trackImageManager.referenceLibrary[i].name); } }
排查与修复方案
调整事件订阅时机:将事件订阅移至
trackImageManager.enabled = true之前,避免错过组件启用时的初始化事件:trackImageManager.trackedImagesChanged += OnTrackedImagesChanged; trackImageManager.enabled = true;强制重置AR追踪状态:切换库后清除旧追踪数据并重启会话,确保新库标记能被重新检测:
// 清除已追踪的旧图像对象 foreach (var trackedImage in trackImageManager.trackables) { trackedImage.gameObject.SetActive(false); } // 重启AR会话以刷新检测逻辑 if (ARSession.state != ARSessionState.None) { ARSession.Restart(); }验证RuntimeLibrary实例有效性:添加空值检查,避免类型转换失败导致库切换无效:
var newRuntimeLib = trackImageManager.CreateRuntimeLibrary(lib) as MutableRuntimeReferenceImageLibrary; if (newRuntimeLib == null) { LogHandler.Instance.LogError("Failed to create valid runtime reference library!"); return; } trackImageManager.referenceLibrary = newRuntimeLib;检查ARSession运行状态:确保切换库时AR会话未处于暂停或错误状态,若会话异常需先恢复再执行切换逻辑。
内容的提问来源于stack exchange,提问作者Hardik
相关产品推荐
相关产品推荐

