如何在 Unity 中使用 OpenXR 获取 SteamVR 输入?

How to get the SteamVR Inputs using OpenXR in Unity?

我在 Unity 中启用了 OpenXR VR 模式。

然后我启用了 HTC Vive 交互配置文件和其他

之后我可以看到世界,我可以得到 HTC Vive 控制器的 Hand 位置, 但我无法获得任何输入, 我怎样才能获得触发按钮按下事件?

我正在使用以下代码:

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;
    }

这是正确的代码吗? 如何获取触发按下事件?

我让它工作的唯一方法是直接使用 SteamVR Unity 插件。

我拖动了 SteamVR/Prefabs 上本地化的“[CameraRig]”对象 目录,到我的场景。

我使用以下代码获取输入:

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);
}

不要忘记绑定 Window -> SteamVR 输入