使用Unity3D的增强现实

时间:2019-02-14 12:26:53

标签: c# unity3d vuforia

我正在开发AR Android应用程序。我已经完成了应用程序的构建,但是无论何时打开它,视频都会在甚至扫描目标图像之前在后台播放,但是只有在扫描图像时才会显示视频。有任何帮助或建议吗? DefaultTrackableEventHandler.cs的代码为:

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;
    }
}

1 个答案:

答案 0 :(得分:1)

如果使用Unity Videoplayer,请检查是否禁用了Video Player检查器视图中的“循环”选项。

第二,包含VideoPlayer组件的游戏对象是ImageTarget游戏对象的子对象吗?

第三,必须在OnTrackingFound()中管理播放,并在OnTrackingLost()中管理有关VideoPlayer的停止。

相关问题