Отключить / включить VR из кода с помощью SteamVR 2.0.1
Как видно из названия, я пытаюсь включить / отключить VR между различными приложениями, и мне нужно делать это столько раз, сколько я хочу. Я использую Unity 2017.4 и SteamVR 2.0.1. Я пытаюсь сделать это с двумя разными сценами одного и того же проекта (тестирую одну в редакторе, а другую запускаю как.exe).
Это решение не работает, поскольку действия и позы, по-видимому, не обрабатываются правильно, когда 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 я добавил проверку внутри 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)
... но они поднимаются всего несколько раз, а затем они останавливаются. Это может быть из-за плохого времени. Кстати, я поместил объект Interactable в пустую сцену, просто чтобы проверить, смогу ли я по-прежнему взаимодействовать с ним после отключения / включения, и кажется, что могу.
Тем не менее, я ожидаю, что какой-то более простой и чистый метод для достижения моей цели Я что-то упускаю из виду или это ошибка в новой версии SteamVR?
Заранее благодарю за любую помощь.
1 ответ
Пожалуйста, смотрите эту ссылку для справки
https://docs.unity3d.com/ScriptReference/XR.XRSettings-enabled.html
Остановка сеанса VR не поддерживается в GearVR, не уверен насчет SteamVR