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

使用Vuforia时TrackableBehaviour.Status类型缺失问题排查

问题:Vuforia 10.28中TrackableBehaviour.Status不存在,编译报错CS0234

问题详情

编译代码时触发如下报错:

Assets\NewBehaviourScript.cs(13,64): error CS0234: The type or namespace name 'Status' does not exist in the namespace 'TrackableBehaviour (are you missing an assembly reference?).

涉及代码:

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

public class ImageTargetFeedback : MonoBehaviour, ITrackableEventHandler
{
    public GameObject feedbackText;
    public string targetIDToLookFor = "dcba3eb2f8844544ba339810510f0491";

    public void OnTrackableStateChanged(TrackableBehaviour.Status status)
    {
        TrackableBehaviour trackableBehaviour = (TrackableBehaviour)target;

        if (status == TrackableBehaviour.Status.DETECTED || status == TrackableBehaviour.Status.TRACKED)
        {
            if (trackableBehaviour.TrackableName == targetIDToLookFor)
            {
                feedbackText.SetActive(true);
                feedbackText.GetComponent<TextMeshProUGUI>().text = "Correct Image Target Detected!";
            }
            else
            {
                feedbackText.SetActive(false);
            }
        }
        else
        {
            feedbackText.SetActive(false);
        }
    }
}

复现步骤

  • 创建Unity 3D Core项目;
  • 拖拽导入Vuforia Engine 10.28;
  • 导入自行在Vuforia平台创建的目标数据库;
  • 获取许可证密钥并配置到AR相机;
  • 通过Vuforia菜单在层级面板创建图像目标并关联数据库;
  • 在图像目标上放置虚拟对象。

需求

数据库内有多张卡片,需实现AR相机识别到指定ID的目标时,显示反馈文本;识别其他目标或未识别时隐藏文本。


原因分析

Vuforia Engine 10及以上版本对API做了兼容性更新:

  1. 原TrackableBehaviour.Status枚举被重命名为TrackableBehaviour.TrackableStatus;
  2. ITrackableEventHandler接口的OnTrackableStateChanged方法签名变更,从单参数改为接收前状态和当前状态两个参数;
  3. 原代码中未定义target变量,无法正确获取图像目标实例。

解决方案

修改代码以适配Vuforia 10.28的API规范:

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

public class ImageTargetFeedback : MonoBehaviour, ITrackableEventHandler
{
    public GameObject feedbackText;
    public string targetIDToLookFor = "dcba3eb2f8844544ba339810510f0491";

    // 适配Vuforia 10+的方法签名
    public void OnTrackableStateChanged(TrackableBehaviour.TrackableStatus previousStatus, TrackableBehaviour.TrackableStatus newStatus)
    {
        TrackableBehaviour trackableBehaviour = GetComponent<TrackableBehaviour>();

        if (newStatus == TrackableBehaviour.TrackableStatus.DETECTED || newStatus == TrackableBehaviour.TrackableStatus.TRACKED)
        {
            // 用TrackableId匹配数据库中的唯一标识,比TrackableName更可靠
            if (trackableBehaviour.TrackableId == targetIDToLookFor)
            {
                feedbackText.SetActive(true);
                feedbackText.GetComponent<TextMeshProUGUI>().text = "Correct Image Target Detected!";
            }
            else
            {
                feedbackText.SetActive(false);
            }
        }
        else
        {
            feedbackText.SetActive(false);
        }
    }

    // 注册状态监听事件
    private void Awake()
    {
        TrackableBehaviour trackableBehaviour = GetComponent<TrackableBehaviour>();
        if (trackableBehaviour != null)
        {
            trackableBehaviour.RegisterTrackableEventHandler(this);
        }
    }

    // 注销监听事件,避免内存泄漏
    private void OnDestroy()
    {
        TrackableBehaviour trackableBehaviour = GetComponent<TrackableBehaviour>();
        if (trackableBehaviour != null)
        {
            trackableBehaviour.UnregisterTrackableEventHandler(this);
        }
    }
}

关键修改说明

  • API适配:将TrackableBehaviour.Status替换为TrackableBehaviour.TrackableStatus,同步更新方法签名;
  • 实例获取:通过GetComponent<TrackableBehaviour>()获取当前挂载脚本的图像目标组件,替代未定义的target变量;
  • 匹配优化:使用TrackableId匹配目标(数据库中目标的唯一标识),比TrackableName更准确;
  • 事件管理:添加Awake和OnDestroy方法,完成事件的注册与注销,确保状态变化能触发回调;
  • 命名空间补充:添加TMPro命名空间,解决TextMeshProUGUI类型识别问题。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.06.15 03:15:01