如何阻止Vuforia行为

时间:2017-10-29 12:55:33

标签: c# unity3d augmented-reality vuforia

我的项目中有三个场景。

第一个只是一个主菜单。

第二个是使用GoogleVR的虚拟现实场景

第三个是使用vuforia的AR场景。

不确定原因,但是当我启动VR场景(非AR)时,vuforia行为也被加载,它改变了我的视野。

有一种方法可以阻止vuforia在加载应用时启动,并在加载AR场景时启动?

我尝试了这个,但没有奏效。这停止了​​相机实例,但没有停止vuforia行为。

public void stopAR(){
    if (Vuforia.CameraDevice.Instance.IsActive()) {
        Vuforia.CameraDevice.Instance.Deinit ();
        Vuforia.CameraDevice.Instance.Stop ();
        Debug.Log ("AR Stopped");
    }
}

4 个答案:

答案 0 :(得分:1)

[解决] 我按照这个来解决这个问题:

在我不希望Vuforia启动的主摄像头上,添加VuforiaBehavious脚本

取消选中

完成。

答案 1 :(得分:1)

对于感兴趣的人,我找到了一种完全在this example之后禁用此行为的方法。

您只需将其添加到FIRST场景中的游戏对象,并确保它先执行(例如通过脚本执行顺序)。它取消订阅从SceneManagerVuforiaRuntime单例的事件方法调用,该方法将行为添加到每个场景中的每个主摄像机。一旦完成,就永远不要再这样做。

Unity 2017.3.1p4的测试版

using UnityEngine;
using System.Reflection;
using UnityEngine.SceneManagement;
using System;

public class StopAutoAddVuforia : MonoBehaviour
{
     private void Awake() {
         // https://forum.unity.com/threads/use-ar-camera-vuforia-core-in-individual-scene-not-entire-project.498489/
         try {
             EventInfo evSceneLoaded = typeof(SceneManager).GetEvent("sceneLoaded");
             Type tDelegate = evSceneLoaded.EventHandlerType;

             MethodInfo attachHandler = typeof(Vuforia.VuforiaRuntime).GetMethod("AttachVuforiaToMainCamera", BindingFlags.NonPublic | BindingFlags.Static);

             Delegate d = Delegate.CreateDelegate(tDelegate, attachHandler);
             SceneManager.sceneLoaded -= d as UnityEngine.Events.UnityAction<Scene, LoadSceneMode>;
         } catch (Exception e) {
             Debug.LogWarning("Cant remove the AttachVuforiaToMainCamera action. Execption:" + e.Message);
         }

         Destroy(this);
     }
 }

Unity 2018.2.4f1测试版

using UnityEngine;
using System.Reflection;
using UnityEngine.SceneManagement;
using System;

 public class StopAutoAddVuforia : MonoBehaviour
 {
     private void Awake() {
         // https://forum.unity.com/threads/use-ar-camera-vuforia-core-in-individual-scene-not-entire-project.498489/
         try {
             EventInfo evSceneLoaded = typeof(SceneManager).GetEvent("sceneLoaded");
             Type tDelegate = evSceneLoaded.EventHandlerType;

             MethodInfo attachHandler = typeof(Vuforia.VuforiaRuntime).GetMethod("AttachVuforiaToMainCamera", BindingFlags.NonPublic | BindingFlags.Instance);

             Delegate d = Delegate.CreateDelegate(typeof(UnityEngine.Events.UnityAction<Scene, LoadSceneMode>), Vuforia.VuforiaRuntime.Instance, attachHandler);
             SceneManager.sceneLoaded -= d as UnityEngine.Events.UnityAction<Scene, LoadSceneMode>;
         } catch (Exception e) {
             Debug.LogError("Cant remove the AttachVuforiaToMainCamera action. Exception " + e.Message);
         }

         Destroy(this);
     }
 }

答案 2 :(得分:0)

using UnityEngine;
using Vuforia;

public class NoAR : MonoBehaviour
{
    public Camera camera;

    // Use this for initialization
    void Start()
    {
        if(camera.enabled)
            if (camera.GetComponent<VuforiaBehaviour>() != null)
                camera.GetComponent<VuforiaBehaviour>().enabled = false;
    }
}

答案 3 :(得分:0)

[已解决]您只需使用 VuforiaBehavior 组件启用/禁用Vuforia摄像机即可。

void StartCamera () {
    vuforiaBehavior.enabled = true;
}

void StopCamera () {
    vuforiaBehavior.enabled = false;
}