Как получить входы SteamVR с помощью OpenXR в Unity?

Я включил в Unity режим OpenXR VR.

Затем я включил профиль взаимодействия HTC Vive и другие

После этого я могу видеть мир, и я могу получить положение рук контроллера HTC Vive, но я не могу получить никаких данных. Как я могу получить, например, событие нажатия кнопки триггера?

Я использую следующий код:

      private UnityEngine.XR.InputDevice inputDevice;

public bool isIndexTriggerPressed()
    {
        bool triggerValue = false;
        inputDevice.TryGetFeatureValue(UnityEngine.XR.CommonUsages.triggerButton, out triggerValue);
        if ((!previousIndexTriggerPressed) && (triggerValue))
        {
            previousIndexTriggerPressed = triggerValue;
            return true;
        }
        previousIndexTriggerPressed = triggerValue;
        return false;
    }

Это правильный код? Как я могу получить событие нажатия триггера?

1 ответ

Единственный способ заставить его работать - использовать непосредственно плагин SteamVR Unity.

Я перетащил объект «[CameraRig]», локализованный в каталоге SteamVR / Prefabs, в свою сцену.

Я использовал следующий код для получения входных данных:

      private GameObject controller;
private SteamVR_Input_Sources inputDevice = SteamVR_Input_Sources.LeftHand;

public void setInputDevice(SteamVR_Input_Sources inputDevice)
{
    this.inputDevice = inputDevice;
}

public void setController(GameObject controller)
{
    this.controller = controller;
}

public GameObject getController()
{
    return controller;
}

public Vector2 getTrackPad()
{
    return SteamVR_Actions.default_Trackpad.GetAxis(inputDevice);
}

public bool isHandTrigger()
{
    return SteamVR_Actions.default_GrabGrip.GetState(inputDevice);
}

public bool isHandTriggerPressed()
{
    return SteamVR_Actions.default_GrabGrip.GetStateDown(inputDevice);
}

public bool isHandTriggerReleased()
{
    return SteamVR_Actions.default_GrabGrip.GetStateUp(inputDevice);
}

public bool isIndexTrigger()
{
    return SteamVR_Actions.default_GrabPinch.GetState(inputDevice);
}

public bool isIndexTriggerPressed()
{
    return SteamVR_Actions.default_GrabPinch.GetStateDown(inputDevice);
}

public bool isIndexTriggerReleased()
{
    return SteamVR_Actions.default_GrabPinch.GetStateUp(inputDevice);
}

public bool isMenu()
{
    return SteamVR_Actions.default_Menu.GetState(inputDevice);
}

public bool isMenuPressed()
{
    return SteamVR_Actions.default_Menu.GetStateDown(inputDevice);
}

public bool isMenuReleased()
{
    return SteamVR_Actions.default_Menu.GetStateUp(inputDevice);
}

Не забудьте окно привязок -> Вход SteamVR

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