首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >使用SteamVR 2.0.1从代码中禁用/启用VR

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

Stack Overflow用户
提问于 2019-01-24 10:10:52
回答 1查看 1.7K关注 0票数 0

正如标题所述,我正在尝试在不同的应用程序之间启用/禁用VR,并且我需要这样做很多次。我使用的是Unity2017.4和SteamVR 2.0.1。我试图用同一个项目的两个不同场景来完成这个任务(在编辑器中测试一个,并启动另一个作为.exe)。

This solution不起作用,因为当VR用XRSettings.enabled = false停止时,显然不能正确地处理动作和姿势。

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

我想找个解决办法:

1)禁用/启用播放器和手

代码语言:javascript
复制
    ...
    // ** 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文件中添加了这些行:

代码语言:javascript
复制
private void Dispose(bool disposing)
    {
        ...

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

(为了使其工作,我必须为SteamVR_Behaviour.instance属性添加一个公共设置程序)。

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

代码语言:javascript
复制
if (_instance != null) ... // do update

这些修改实际上不会解决问题,因为当我启用back VR时,仍然有一些例外情况,例如:

代码语言:javascript
复制
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)

...but,他们只被养了几次,然后就停止了。可能是因为时机不对。顺便说一句,我在空场景中放置了一个可交互的游戏对象,只是为了测试在禁用/启用之后是否还能与它交互,而且我似乎可以。

不过,我还是希望有一些更简单、更干净的方法来实现我的目标。我是遗漏了一些明显的东西,还是SteamVR最新版本中的一个bug?

提前感谢您的帮助。

EN

回答 1

Stack Overflow用户

发布于 2019-01-24 10:24:42

请参阅此连结以供参考。

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

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

票数 -1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/54344079

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档