【问题标题】:How to get the SteamVR Inputs using OpenXR in Unity?如何在 Unity 中使用 OpenXR 获取 SteamVR 输入?
【发布时间】:2021-12-04 21:40:44
【问题描述】:

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

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

【问题讨论】:

    标签: unity3d input htc-vive steamvr openxr


    【解决方案1】:

    我让它工作的唯一方法是直接使用 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);
    }
    

    别忘了绑定窗口 -> SteamVR 输入

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多