一旦应用识别出Vuforia / Unity上的图像目标,如何使文本消失?

时间:2018-03-28 12:17:36

标签: unity3d augmented-reality vuforia

一旦应用识别出图像目标(通过Vuforia),如何让文字消失?

我试图创建一个AR应用程序,在将手机摄像头放在贺卡上之前告诉用户说明。一旦用户将相机投影到贺卡上并识别出与该卡相关联的图像目标之一,如何使该文本消失?

  • 将Unity / Vuforia用于AR App

4 个答案:

答案 0 :(得分:0)

在图像检测后编写生成/可见对象的代码,同样的地方只是隐藏文本,如SetActive false。

答案 1 :(得分:0)

看起来你要问的是非常基本的,你应该从Vuforia样本开始并覆盖处理目标检测的代码。它应该是这样的:

public void OnTrackableStateChanged(TrackableBehaviour.Status previousStatus, TrackableBehaviour.Status newStatus)
{
    if (newStatus == TrackableBehaviour.Status.DETECTED ||
        newStatus == TrackableBehaviour.Status.TRACKED ||
        newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
    {
       // hide your text here
    }
    else
    {
        // show your text here (or do anything else you wish to do)
    }
}   

答案 2 :(得分:0)

您需要在sdk中由Vuforia提供的DefaultTrackableEventHandler脚本的OnTrackableStateChanged中管理UIText对象可见性。

public void OnTrackableStateChanged(                                         TrackableBehaviour.Status previousStatus,                                         TrackableBehaviour.Status newStatus)         {             if(newStatus == TrackableBehaviour.Status.DETECTED ||                 newStatus == TrackableBehaviour.Status.TRACKED ||                 newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)             {                 OnTrackingFound();             }             其他             {                 OnTrackingLost();             }         }

在OnTrackingFound()函数中,您可以执行此操作。 创建一个公共UItext对象,并在统一的一侧将UItext拖到该公共变量。

答案 3 :(得分:0)

在此脚本中添加任何要在编辑器的“事件列表”中启动和停止的内容。例如,将GameObject设置为活动状态。

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

public class ImageTargetBehaviour : MonoBehaviour, ITrackableEventHandler
{
    private TrackableBehaviour mTrackableBehaviour;
    public UnityEvent myStartEvent;
    public UnityEvent myStopEvent;

    void Start()
    {
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour)
        {
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
        }
    }

    public void OnTrackableStateChanged(
                                    TrackableBehaviour.Status previousStatus,
                                    TrackableBehaviour.Status newStatus)
    {
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            // When target is found
            myStartEvent.Invoke();
        }
        else
        {
            // When target is lost
            myStopEvent.Invoke();
        }
    }
}