首页 > 解决方案 > 使用 Unity3D 增强现实

问题描述

我正在开发一个 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;
    }
}

标签: c#unity3dvuforia

解决方案


如果您使用 Unity Videoplayer,请检查您是否在 Video Player Inspector 视图中禁用了 Loop 选项。

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

第三,您必须在 OnTrackingFound() 中管理 Play,在 OnTrackingLost() 中管理有关 VideoPlayer 的 Stop。


推荐阅读