J.Calvin Daniel
J.Calvin Daniel

Reputation: 11

Augmented Reality using Unity3D

I am working on an AR Android application. I finished building the application but whenever I open it, the video plays in the background before even scanning the target image but the video gets displayed only when I scan the image. Any help or suggestions about that? The code for DefaultTrackableEventHandler.cs is:

using UnityEngine;
using Vuforia;
public class DefaultTrackableEventHandler : MonoBehaviour, ITrackableEventHandler
{
    protected TrackableBehaviour mTrackableBehaviour;
    protected TrackableBehaviour.Status m_PreviousStatus;
    protected TrackableBehaviour.Status m_NewStatus;
    protected virtual void Start()
    {
        mTrackableBehaviour = GetComponent<TrackableBehaviour>();
        if (mTrackableBehaviour)
            mTrackableBehaviour.RegisterTrackableEventHandler(this);
    }
   protected virtual void OnDestroy()
    {
        if (mTrackableBehaviour)
            mTrackableBehaviour.UnregisterTrackableEventHandler(this);
    }
    public void OnTrackableStateChanged(
        TrackableBehaviour.Status previousStatus,
        TrackableBehaviour.Status newStatus)
    {
        m_PreviousStatus = previousStatus;
        m_NewStatus = newStatus;
        if (newStatus == TrackableBehaviour.Status.DETECTED ||
            newStatus == TrackableBehaviour.Status.TRACKED ||
            newStatus == TrackableBehaviour.Status.EXTENDED_TRACKED)
        {
            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " found");
            OnTrackingFound();
        }
        else if (previousStatus == TrackableBehaviour.Status.TRACKED &&
                 newStatus == TrackableBehaviour.Status.NO_POSE)
        {
            Debug.Log("Trackable " + mTrackableBehaviour.TrackableName + " lost");
            OnTrackingLost();
        }
        else
        {
                       OnTrackingLost();
        }
    }
   protected virtual void OnTrackingFound()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);
        foreach (var component in rendererComponents)
            component.enabled = true;
               foreach (var component in colliderComponents)
            component.enabled = true;
             foreach (var component in canvasComponents)
            component.enabled = true;
    }
    protected virtual void OnTrackingLost()
    {
        var rendererComponents = GetComponentsInChildren<Renderer>(true);
        var colliderComponents = GetComponentsInChildren<Collider>(true);
        var canvasComponents = GetComponentsInChildren<Canvas>(true);
               foreach (var component in rendererComponents)
            component.enabled = false;
                foreach (var component in colliderComponents)
            component.enabled = false;
                foreach (var component in canvasComponents)
            component.enabled = false;
    }
}

Upvotes: 0

Views: 48

Answers (1)

Kafar
Kafar

Reputation: 29

If you use the Unity Videoplayer check if you disabled the Loop option in Video Player Inspector view.

Second, the game object that include the VideoPlayer component is located as child of ImageTarget gameobject?

Third, in the OnTrackingFound() you must manage the Play and in OnTrackingLost() the Stop about VideoPlayer.

Upvotes: 1

Related Questions