You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何切换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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.08.01 22:10:35