Unity使用Vuforia时是否有判断图像跟踪状态的Bool类型函数?
问题修正方案
你的代码核心问题是变量类型定义错误:GameObject类型本身没有Status属性,你需要将两个图像的引用指向Vuforia提供的DefaultObserverEventHandler组件,才能读取跟踪状态。
具体修改点:
- 把
aImage、bImage的变量类型从GameObject改为DefaultObserverEventHandler - 你原有的跟踪状态判断逻辑是正确的,
Tracked_ExtendedTracked枚举值本身就对应了跟踪中/扩展跟踪中两种状态,满足条件时判断语句返回true - 优化时间判定逻辑,浮点数不要直接用
==判断相等,避免精度问题导致判定失效
修正后完整代码:
using System.Collections; using System.Collections.Generic; using UnityEngine; using Vuforia; // 注意要引入Vuforia的命名空间,否则找不到对应类型 public class Lerp : MonoBehaviour { [SerializeField] public GameObject cube; //My 3d object [SerializeField] private Transform a; // Image A position [SerializeField] private Transform b; //Image B position private float time = 0; // 修改变量类型为DefaultObserverEventHandler [SerializeField] public DefaultObserverEventHandler aImage; [SerializeField] public DefaultObserverEventHandler bImage; void Start() { time = 0; } private void Update() { Vector3 startPosition = a.position; Vector3 targetPosition = b.position; // 这里的判断逻辑不需要改,现在aImage和bImage有Status属性了 if (aImage.Status == DefaultObserverEventHandler.TrackingStatusFilter.Tracked_ExtendedTracked && bImage.Status == DefaultObserverEventHandler.TrackingStatusFilter.Tracked_ExtendedTracked ) { time += Time.deltaTime; Debug.Log("time:" + time); cube.transform.position = Vector3.Lerp(startPosition, targetPosition, time / 5f); // 简化时间判断逻辑 if (time >= 5f) { time = 0; } } } }
操作注意事项:
- 脚本挂载完成后,在Inspector面板把两个图像目标对象直接拖到
aImage、bImage的对应字段上即可,Unity会自动读取对象上挂载的DefaultObserverEventHandler组件。 - 如果你的Vuforia版本较低找不到
DefaultObserverEventHandler,可以替换成DefaultTrackableEventHandler,属性调用逻辑完全一致。
内容的提问来源于stack exchange,提问作者TagaRamer
相关产品推荐
相关产品推荐

