Отключить / включить VR из кода с помощью SteamVR 2.0.1 - PullRequest
0 голосов
/ 24 января 2019

Как видно из названия, я пытаюсь включить / отключить 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 Ответ

0 голосов
/ 24 января 2019

См. Эту ссылку для справки

https://docs.unity3d.com/ScriptReference/XR.XRSettings-enabled.html

Остановка сеанса VR не поддерживается в GearVR, не уверен насчет SteamVR

...