我的项目中有三个场景。
第一个只是一个主菜单。
第二个是使用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");
}
}
答案 0 :(得分:1)
[解决] 我按照这个来解决这个问题:
在我不希望Vuforia启动的主摄像头上,添加VuforiaBehavious脚本
取消选中
完成。
答案 1 :(得分:1)
对于感兴趣的人,我找到了一种完全在this example之后禁用此行为的方法。
您只需将其添加到FIRST场景中的游戏对象,并确保它先执行(例如通过脚本执行顺序)。它取消订阅从SceneManager到VuforiaRuntime单例的事件方法调用,该方法将行为添加到每个场景中的每个主摄像机。一旦完成,就永远不要再这样做。
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;
}