【问题标题】:Unity XR.Settings.LoadDeviceByName() not loading deviceUnity XR.Settings.LoadDeviceByName() 未加载设备
【发布时间】:2021-04-26 17:41:05
【问题描述】:

我曾尝试使用 XRSettings.LoadDeviceByName() 但它从来没有用过。我已经检查了参数设备名称是否与当前设备名称相同,但没有任何变化。另外,我在 sdk 列表中添加了 None

XRSettings.loadedDeviceName 在启动时是纸板。

IEnumerator testThis() {
  if (string.Compare(XRSettings.loadedDeviceName, "", true) != 0) {
    XRSettings.LoadDeviceByName("none");
    some_text.text = XRSettings.loadedDeviceName;
    yield return new WaitForSeconds(1);
    XRSettings.enabled = true;
    some_text.text = "Device name " + XRSettings.loadedDeviceName;
    }
        
  }
 
  IEnumerator temp() {
    some_text.text = "Device name " + XRSettings.loadedDeviceName;
    yield return new WaitForSeconds(10);
    StartCoroutine(testThis());
 }

无论我怎么检测,设备名称仍然是纸板。

https://docs.unity3d.com/ScriptReference/XR.XRSettings.LoadDeviceByName.html

我做了什么:

  1. 将 None 设为虚拟现实 SDK 之一
  2. 使用 XR 插件管理 2.1 禁用虚拟现实支持 2.2 将相机转换为 XR-Rig 2.3 使用XR-Plugin Management中关于关闭VR的代码 2.4 备注:步骤 2 中的所有过程在 iOS 构建中都可以工作,但在 android 构建中失败。 2.5https://docs.unity3d.com/Packages/com.unity.xr.management@4.0/manual/index.html
  3. 试过 XRSettings.LoadDeviceByName("none"); XRSettings.LoadDeviceByName(""); XRSettings.LoadDeviceByName("None");

【问题讨论】:

    标签: android unity3d virtual-reality


    【解决方案1】:
    1. 确保在您的 VR SDK 中首先显示“none”,然后是 Cardboard。

    2. 我发现你的比较有问题,没有价值

      if (string.Compare(XRSettings.loadedDeviceName, "", true) != 0) {

    如果我正确理解你想要做什么,这里的代码将收到一个设备名称,并将触发具有此名称的 LoadDevice 协同程序。

        public void VerifyDeviceName(string newDeviceName)
    {
        if (newDeviceName == "none")
        {
            Debug.Log("Will load none device");
            StartCoroutine(LoadDevice(newDeviceName));
    
        }
        if (newDeviceName == "cardboard")
        {
            Debug.Log("Will load cardboard device");
            StartCoroutine(LoadDevice(newDeviceName));
        }
        else
        {
            Debug.Log("Can't find device with name " + newDeviceName);
        }
    
    }
    
    IEnumerator LoadDevice(string newDeviceName)
    {
        XRSettings.LoadDeviceByName(newDeviceName);
        yield return new WaitForSeconds(10);
        XRSettings.enabled = true;
        Debug.Log("Loaded " + newDeviceName);
    }
    

    注意;这显然在编辑器中不起作用,您会收到一条消息,说您无法在编辑器模式下触发 on/off vr。

    【讨论】:

    • 我认为它不起作用,因为我的问题是 LoadDeviceByName() 函数不起作用。我尝试了以下代码,并在 Android 手机中跟踪 LoadedDeviceByName,但该设备名称始终与启动时的名称相同。使用上面的代码,它总是没有。
    • 为了简化,如果我将 Debug.Log("Loaded" + newDeviceName) 更改为 Debug.Log("Loaded",此代码将在调试日志中显示“将加载纸板设备”和“未加载” + XRSettings.LoadedDeviceName)
    【解决方案2】:

    我只是通过蛮力解决了这个问题。秘诀是不要按名称加载设备。如果您尝试加载“无”,您应该初始化和取消初始化您的 XR 加载器。

    1. 在项目设置 -> XR 插件管理中禁用“启动时初始化 XR”

    2. 在代码中使用这两种方法

      IEnumerator StartXR(){ yield return XRGeneralSettings.Instance.Manager.InitializeLoader(); 如果(XRGeneralSettings.Instance.Manager.activeLoader == null){ Debug.Log("初始化失败"); } 别的{ XRGeneralSettings.Instance.Manager.activeLoader.Start(); } } 无效停止XR(){ XRGeneralSettings.Instance.Manager.activeLoader.Stop(); XRGeneralSettings.Instance.Manager.activeLoader.Deinitialize(); } (对不起,我对代码片段很敏感!我是新来回答的) 然后根据需要调用它们。它应该在您的项目中打开和关闭 XR

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2016-06-29
      • 1970-01-01
      • 2022-08-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-04-06
      相关资源
      最近更新 更多