我不明白为什么当我编译此代码时类型
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”(您是否缺少程序集引用?)。
重现步骤:
我还需要导入其他东西吗?
我想做的是,数据库中已经有一些卡片。它们位于我的 Vuforia 数据库中。当我单击“运行”时,我试图让 AR 相机对每张卡执行简单的是/否任务。正如您在公共字符串
TargetIDtolookfor = "dcba3eb2f8844544ba339810510f0491"
中看到的,expectedCardID
中的名称是数据库中的卡片名称。
我不断遇到 CS0234 类型/命名空间错误。你能解释一下为什么缺少
Status
类型吗?我需要更改什么才能找到该类型?
错误 (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;
}
}
希望有帮助,