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

ITrackableEventHandler在新版Vuforia失效,求替代方案及报错解决

解决Vuforia新版中ITrackableEventHandler弃用问题

问题原因

Vuforia 10及以上版本移除了ITrackableEventHandler接口,旧版TrackableBehaviour的用法也有调整,导致旧脚本出现类型找不到的报错。

替代方案

以下两种方式可实现原脚本的跟踪状态监听逻辑:

方式1:使用官方推荐的ITrackableStatusObserver接口

替换原ITrackableEventHandler接口,实现状态监听:

using UnityEngine;
using UnityEngine.UI;
using Vuforia;

public class IoT : MonoBehaviour, ITrackableStatusObserver
{
    public GameObject imageTarget;
    private TrackableBehaviour mTrackableBehaviour;
    private bool targetFound = false;
    public GameObject hide;

    void Start()
    {
        mTrackableBehaviour = imageTarget.GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour != null)
        {
            mTrackableBehaviour.RegisterTrackableStatusObserver(this);
        }
    }

    void OnDestroy()
    {
        if (mTrackableBehaviour != null)
        {
            mTrackableBehaviour.UnregisterTrackableStatusObserver(this);
        }
    }

    public void OnTrackableStatusChanged(
        TrackableBehaviour.Status previousStatus,
        TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            OnTargetFound();
        }
        else
        {
            OnTargetLost();
        }
    }

    void OnTargetFound()
    {
        targetFound = true;
        if (hide != null)
            hide.SetActive(false);
    }

    void OnTargetLost()
    {
        targetFound = false;
        if (hide != null)
            hide.SetActive(true);
    }
}

方式2:直接订阅状态变化事件

无需实现接口,通过事件绑定完成监听:

using UnityEngine;
using UnityEngine.UI;
using Vuforia;

public class IoT : MonoBehaviour
{
    public GameObject imageTarget;
    private TrackableBehaviour mTrackableBehaviour;
    private bool targetFound = false;
    public GameObject hide;

    void Start()
    {
        mTrackableBehaviour = imageTarget.GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour != null)
        {
            mTrackableBehaviour.OnTrackableStatusChanged += OnTrackableStatusChanged;
        }
    }

    void OnDestroy()
    {
        if (mTrackableBehaviour != null)
        {
            mTrackableBehaviour.OnTrackableStatusChanged -= OnTrackableStatusChanged;
        }
    }

    void OnTrackableStatusChanged(
        TrackableBehaviour.Status previousStatus,
        TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            targetFound = true;
            if (hide != null)
                hide.SetActive(false);
        }
        else
        {
            targetFound = false;
            if (hide != null)
                hide.SetActive(true);
        }
    }
}

额外注意事项

  • 确保Unity中已正确导入最新版Vuforia包,且保留using Vuforia;命名空间引用。
  • 若TrackableBehaviour仍报错,可替换为ImageTargetBehaviour(图像目标的子类,用法完全一致)。

内容的提问来源于stack exchange,提问作者Sol

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.07.27 07:25:05