【问题标题】:Disable/Enable VR from code using SteamVR 2.0.1使用 SteamVR 2.0.1 从代码禁用/启用 VR
【发布时间】:2019-01-24 10:10:52
【问题描述】:

正如标题所说,我正在尝试在不同应用程序之间启用/禁用 VR,并且我需要尽可能多地执行此操作。 我正在使用 Unity 2017.4 和 SteamVR 2.0.1。我正在尝试对同一个项目的两个不同场景进行此操作(在编辑器中测试一个,并将另一个作为 .exe 启动)。

This solution 无法正常工作,因为在使用 XRSettings.enabled = false 停止 VR 时,显然动作和姿势没有正确处理。

有没有人经历过同样的行为?

我试图找到解决方法:

1)同时禁用/启用玩家和手

    ...
    // ** ENABLE VR **
    if (enable)
    {
        print("Enabling VR ...");

        XRSettings.LoadDeviceByName("OpenVR");
        yield return null;

        print("Loaded device: " + XRSettings.loadedDeviceName);
        XRSettings.enabled = enable;
        EnablePlayerAndHands(true);
    }
    // ** DISABLE VR **
    else
    {
        print("Disabling VR ...");

        EnablePlayerAndHands(false);
        XRSettings.LoadDeviceByName("");
        yield return null;

        print("Loaded device: " + XRSettings.loadedDeviceName);
        XRSettings.enabled = false;
    }
    ...

2) 在 SteamVR.cs 文件中添加了这些行:

private void Dispose(bool disposing)
    {
        ...

        // added code
        SteamVR_Input.initialized = false;
        SteamVR_Behaviour.instance = null;
    }

(为了让它工作,我必须为 SteamVR_Behaviour.instance 属性添加一个公共设置器)。

3) 在 SteamVR_Behaviour 中,我在 Update()、LateUpdate() 和 FixedUpdate() 中添加了检查:

if (_instance != null) ... // do update

这些修改实际上并不能解决问题,因为我在启用回VR时仍然有一些异常,例如:

GetPoseActionData error (/actions/default/in/SkeletonLeftHand): InvalidHandle handle: 1152990670760182193
UnityEngine.Debug:LogError(Object)
Valve.VR.SteamVR_Action_Pose:UpdateValue(SteamVR_Input_Sources, Boolean) (at Assets/SteamVR/Input/SteamVR_Action_Pose.cs:96)
Valve.VR.SteamVR_Action_Skeleton:UpdateValue(SteamVR_Input_Sources, Boolean) (at Assets/SteamVR/Input/SteamVR_Action_Skeleton.cs:75)
Valve.VR.SteamVR_Input:UpdateSkeletonActions(SteamVR_Input_Sources, Boolean) (at Assets/SteamVR/Input/SteamVR_Input.cs:487)
Valve.VR.SteamVR_Input:UpdateSkeletonActions(Boolean) (at Assets/SteamVR/Input/SteamVR_Input.cs:462)
Valve.VR.SteamVR_Input:LateUpdate() (at Assets/SteamVR/Input/SteamVR_Input.cs:352)
Valve.VR.SteamVR_Behaviour:LateUpdate() (at Assets/SteamVR/Scripts/SteamVR_Behaviour.cs:224)

...但是它们只被提升了几次然后就停止了。这可能是由于一些糟糕的时机。顺便说一句,我在空场景中放置了一个可交互的游戏对象,只是为了测试在禁用/启用后我是否仍然可以与它交互,看来我可以。

不过,我希望有一些更简单、更清洁的方法来实现我的目标。我遗漏了什么明显的东西还是 SteamVR 最新版本的错误?

提前感谢您的帮助。

【问题讨论】:

标签: c# unity3d virtual-reality htc-vive steamvr


【解决方案1】:

请参阅此链接以供参考

https://docs.unity3d.com/ScriptReference/XR.XRSettings-enabled.html

GearVR 不支持停止 VR 会话,不确定 SteamVR

【讨论】:

  • 嗨 zambari,很抱歉,不支持是什么意思?通过 Unity 还是通过 SteamVR?
  • 我的原始答案部分错误,请参阅更新后的答案
猜你喜欢
  • 1970-01-01
  • 2014-04-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多