Как видно из названия, я пытаюсь включить / отключить 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?
Заранее спасибо за любую помощь.