正如标题所述,我正在尝试在不同的应用程序之间启用/禁用VR,并且我需要这样做很多次。我使用的是Unity2017.4和SteamVR 2.0.1。我试图用同一个项目的两个不同场景来完成这个任务(在编辑器中测试一个,并启动另一个作为.exe)。
This solution不起作用,因为当VR用XRSettings.enabled = false停止时,显然不能正确地处理动作和姿势。
有没有人经历过同样的行为?
我想找个解决办法:
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中,我在SteamVR_Behaviour()、LateUpdate()和FixedUpdate()中添加了一个检查:
if (_instance != null) ... // do update这些修改实际上不会解决问题,因为当我启用back 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)...but,他们只被养了几次,然后就停止了。可能是因为时机不对。顺便说一句,我在空场景中放置了一个可交互的游戏对象,只是为了测试在禁用/启用之后是否还能与它交互,而且我似乎可以。
不过,我还是希望有一些更简单、更干净的方法来实现我的目标。我是遗漏了一些明显的东西,还是SteamVR最新版本中的一个bug?
提前感谢您的帮助。
发布于 2019-01-24 10:24:42
请参阅此连结以供参考。
https://docs.unity3d.com/ScriptReference/XR.XRSettings-enabled.html
在GearVR中不支持停止VR会话,也不确定SteamVR
https://stackoverflow.com/questions/54344079
复制相似问题