cybercutte
cybercutte

Reputation: 1

AR Vuforia Canvas always show and stuck when Track Image target is lost

Hierarchy:

ARCamera

Image target

 -Canvas

First start Canvas not show (it good)

Track Image target found, canvas show

but if track image target lost, canvas always show like stuck.

I was change script and see another tutorial

so, I am copy script from defaultTrackableEventHandler.cs to canvas.cs

this is script canvas.cs basic from DefaultTrackableEventHandler.cs

and my canvas name is "Information" (If Needed).

/*==============================================================================
Copyright (c) 2010-2014 Qualcomm Connected Experiences, Inc.
All Rights Reserved.
Confidential and Proprietary - Qualcomm Connected Experiences, Inc.
==============================================================================*/

using UnityEngine;

namespace Vuforia
{
/// <summary>
/// A custom handler that implements the ITrackableEventHandler interface.
/// </summary>
public class canvas : MonoBehaviour,
ITrackableEventHandler
{
#region PRIVATE_MEMBER_VARIABLES

private TrackableBehaviour mTrackableBehaviour;

#endregion // PRIVATE_MEMBER_VARIABLES



#region UNTIY_MONOBEHAVIOUR_METHODS

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

#endregion // UNTIY_MONOBEHAVIOUR_METHODS



#region PUBLIC_METHODS

/// <summary>
/// Implementation of the ITrackableEventHandler function called when the
/// tracking state changes.
/// </summary>
public void OnTrackableStateChanged(
  TrackableBehaviour.Status previousStatus,
  TrackableBehaviour.Status newStatus)
{
  if (newStatus == TrackableBehaviour.Status.DETECTED ||
      newStatus == TrackableBehaviour.Status.TRACKED ||
      newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
  {
   OnTrackingFound();
  }
  else
  {
   OnTrackingLost();
  }
}

#endregion // PUBLIC_METHODS



#region PRIVATE_METHODS


private void OnTrackingFound()
{

   Canvas[] canvasComponents = GetComponentsInChildren<Canvas>(true);

   // Enable canvas objects
   foreach (Canvas component in canvasComponents)
   {
    component.enabled = true;
   }

}


private void OnTrackingLost()
{

   Canvas[] canvasComponents = GetComponentsInChildren<Canvas>(true);

   // Disable canvas objects
   foreach (Canvas component in canvasComponents)
   {
    component.enabled = false;
   }

}

#endregion // PRIVATE_METHODS
}
}

Upvotes: 0

Views: 1845

Answers (1)

Kanagalingam
Kanagalingam

Reputation: 2214

Go to DefaultTrackableEventHandler.cs under your Assests--> Vuforia--> Scripts folder. You will find two methods namely, OnTrackingFound(),OnTrackingLost().

Under OnTrackingFound(), Add the below codes.

Canvas[] canvasComponents = GetComponentsInChildren<Canvas>(true);

            //Enable canvas:
            foreach(Canvas component in canvasComponents)
            {
               component.enabled=true;
            }

Under OnTrackingLost(), add the below lines

  Canvas[] canvasComponents = GetComponentsInChildren<Canvas>(true);

 // Disable canvas:
            foreach (Canvas component in canvasComponents)
            {
                component.enabled = false;
            }

NOTE: Make sure your Canvas must be inside ImageTarget folder in project hierarchy!

That's it! You are set! Check with it!

Upvotes: 2

Related Questions