使用 Vuforia 时缺少 TrackableBehaviour.Status 类型

问题描述 投票:0回答:1

我不明白为什么当我编译此代码时类型

TrackableBehaviour.Status
不存在。

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);
        }
    }
}

编译上面的代码,我得到的错误是:

Assets\NewBehaviourScript.cs(13,64):错误CS0234:命名空间“TrackableBehaviour”中不存在类型或命名空间名称“Status”(您是否缺少程序集引用?)。

重现步骤:

  1. Unity 项目 3d 核心。
  2. 通过拖放将 vuforia 引擎 10.28 添加到我的项目中。
  3. 在 vuforia 中创建了我的目标数据库,所以我也导入了它。
  4. 获取许可证密钥并放入AR相机
  5. 在层次结构下,vuforia我创建了一个图像目标并使用数据库来设置图像。
  6. 将虚拟物体放置在目标上

我还需要导入其他东西吗?

我想做的是,数据库中已经有一些卡片。它们位于我的 Vuforia 数据库中。当我单击“运行”时,我试图让 AR 相机对每张卡执行简单的是/否任务。正如您在公共字符串

TargetIDtolookfor = "dcba3eb2f8844544ba339810510f0491"
中看到的,
expectedCardID
中的名称是数据库中的卡片名称。

我不断遇到 CS0234 类型/命名空间错误。你能解释一下为什么缺少

Status
类型吗?我需要更改什么才能找到该类型?

c# artificial-intelligence vuforia unityscript
1个回答
0
投票

错误 (Assets\NewBehaviourScript.cs(13,64): error CS0234: 命名空间 'TrackableBehaviour 中不存在类型或命名空间名称 'Status'(您是否缺少程序集引用?)。)表示您正在使用从 Vuforia Engine 9.8 和 Vuforia Engine 10 或更高版本中删除的 API。两个主要版本之间的 API 发生了显着变化。

您应该更新脚本以使用 Vuforia Engine 10 API。有关示例,请参阅Unity 中的状态和状态信息。所以,你可以这样做:

using TMPro;
using UnityEngine;
using Vuforia;

public class ImageTargetFeedback : MonoBehaviour
{
    
    private ObserverBehaviour mObserverBehaviour;
    public GameObject feedbackText;
    public string targetIDToLookFor = "dcba3eb2f8844544ba339810510f0491";

    void Awake()
    {
        ObserverBehaviour mObserverBehaviour = GetComponent<ObserverBehaviour>();

        if (mObserverBehaviour != null)
        mObserverBehaviour.OnTargetStatusChanged += OnStatusChanged;
    }

    void OnStatusChanged(ObserverBehaviour behaviour, TargetStatus status)
    {
        if(status.Status == Status.TRACKED || status.Status == Status.EXTENDED_TRACKED)
        {
            if(behaviour.TargetName == targetIDToLookFor)
            {
                feedbackText.SetActive(true);
                feedbackText.GetComponent<TextMeshProUGUI>().text = "correct Image Target Detected";
            }
            else
            {
                feedbackText.SetActive(false);
            }
        }
        else
        {
            feedbackText.SetActive(false);
        }

        Debug.LogFormat("TargetName: {0}, Status is: {1}, StatusInfo is: {2}", behaviour.TargetName, status.Status, status.StatusInfo);
    }

    void OnDestroy()
    {
        if (mObserverBehaviour != null)
        mObserverBehaviour.OnTargetStatusChanged -= OnStatusChanged;
    }
}

希望有帮助,

© www.soinside.com 2019 - 2024. All rights reserved.