Как следует из названия, я пытаюсь включить/отключить VR между разными приложениями, и мне нужно делать это столько раз, сколько я хочу. Я использую Unity 2017.4 и SteamVR 2.0.1. Я пытаюсь сделать это с двумя разными сценами одного и того же проекта (тестирую одну в редакторе, а другую запускаю как .exe).
Это решение не работает, так как очевидно, что действия и позы обрабатываются неправильно, когда VR остановлен с XRSettings.enabled = false.
Кто-нибудь испытал такое же поведение?
Я попытался найти обходной путь:
1) Отключение/включение также Player и Hands
...
// ** 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?
Заранее благодарю за любую помощь.