Отключить / включить 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

Другие вопросы по тегам