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

Vuforia 10.20.3中TrackableBehaviour与ITrackableEventHandler替代方案咨询

Vuforia 10.20.3 追踪状态检测替代方案

在Vuforia 10.20.3版本中,TrackableBehaviour和ITrackableEventHandler已被弃用并移除,导致原有代码出现以下编译错误:

CS0246: The type or namespace name 'ITrackableEventHandler' could not be found (are you missing a using directive or an assembly reference?)
CS0246: The type or namespace name 'TrackableBehaviour' could not be found (are you missing a using directive or an assembly reference?)

以下是适配Vuforia 10.20.3的替代实现:

using System.Collections;
using System.Collections.Generic;
using UnityEngine;
using Vuforia;

public class MerajAudioPlayScript : MonoBehaviour
{
    protected ObserverBehaviour mObserverBehaviour;
    protected ObserverBehaviour.Status mPreviousStatus;
    protected ObserverBehaviour.Status mNewStatus;
    public AudioSource a;

    void Start()
    {
        mObserverBehaviour = GetComponent<ObserverBehaviour>();
        if (mObserverBehaviour != null)
            mObserverBehaviour.StatusChanged += OnObserverStatusChanged;
    }

    private void OnObserverStatusChanged(ObserverBehaviour.StatusChangedData data)
    {
        mPreviousStatus = data.PreviousStatus;
        mNewStatus = data.NewStatus;
        
        Debug.Log($"Trackable {mObserverBehaviour.TrackableName} {mNewStatus} -- {mObserverBehaviour.CurrentStatusInfo}");

        if (mNewStatus == ObserverBehaviour.Status.DETECTED ||
            mNewStatus == ObserverBehaviour.Status.TRACKED ||
            mNewStatus == ObserverBehaviour.Status.EXTENDED_TRACKED)
        {
            OnTrackingFound();
        }
        else if (mPreviousStatus == ObserverBehaviour.Status.TRACKED &&
                 mNewStatus == ObserverBehaviour.Status.NO_POSE)
        {
            OnTrackingLost();
        }
        else
        {
            OnTrackingLost();
        }
    }

    protected virtual void OnTrackingFound()
    {
        // 识别到目标时的逻辑,比如播放音频
        a.Play();
    }

    protected virtual void OnTrackingLost()
    {
        a.Stop();
    }

    private void OnDestroy()
    {
        // 取消事件订阅,避免内存泄漏
        if (mObserverBehaviour != null)
            mObserverBehaviour.StatusChanged -= OnObserverStatusChanged;
    }
}

关键变化说明

  • 用ObserverBehaviour替代原有的TrackableBehaviour,它是Vuforia 10+中所有可追踪对象(图像、模型等)的基类
  • 不再实现ITrackableEventHandler接口,改为通过订阅StatusChanged事件监听状态变化
  • 状态枚举使用ObserverBehaviour.Status,原有状态值(如DETECTED、TRACKED、NO_POSE等)保持兼容
  • 新增OnDestroy方法取消事件订阅,避免内存泄漏

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.30 07:28:20