使用SteamVR 2.0.1从代码中禁用/启用VR

时间:2019-01-24 10:10:52

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

正如标题所述,我正在尝试启用/禁用不同应用程序之间的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最新版本中的错误?

在此先感谢您的帮助。

1 个答案:

答案 0 :(得分:-1)

Please see this link for reference

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

的标题属性的值

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