0

我创建了一个使用 Unity 的 OpenXR 的游戏。我正在尝试使游戏与 Oculus 和 HTC Vive 兼容。

在下面的代码中,我只是想检测用户何时按下右主按钮。这在 Oculus 上工作得很好,但我有很多 Vive 用户说这不起作用。

bool primary = false;
bool secondary = false;
bool trigger = false;
bool grip = false;
public InputDevice device;

void Start()
    {
        List<InputDevice> devices = new List<InputDevice>();
        InputDevices.GetDevicesAtXRNode(XRNode.RightHand, devices);
        device = devices[0];
    }

public void Update(){
                bool newGrip;
                bool newTrigger;
                bool newSecondary;
                bool newPrimary;
                device.TryGetFeatureValue(CommonUsages.gripButton, out newGrip);
                device.TryGetFeatureValue(CommonUsages.triggerButton, out newTrigger);
                device.TryGetFeatureValue(CommonUsages.secondaryButton, out newSecondary);
                device.TryGetFeatureValue(CommonUsages.primaryButton, out newPrimary);
    
                
                if (newGrip != grip)
                {
                    if (newGrip)
                    {
                        //grip pressed
                    }
                    else
                    {
                        //grip released
                    }
                    grip = newGrip;
                }
                if (newTrigger != trigger)
                {
                    if (newTrigger)
                    {
                        //trigger pressed
                    }
                    else
                    {
                        //trigger released
                    }
                    trigger = newTrigger;
                }
                if (newSecondary != secondary)
                {
                    if (newSecondary)
                    {
                        //secondary pressed
                    }
                    else
                    {
                        //secondary released
                    }
                    secondary = newSecondary;
                }
                if (newPrimary != primary)
                {
                    if (newPrimary)
                    {
                        //primary pressed
                    }
                    else
                    {
                        //primary released
                    }
                    primary = newPrimary;
                }
}

请注意,在 HTC Vive 和 Oculus 上都可以很好地检测到触发器和手柄。Vive 不支持辅助按钮,所以我假设 device.TryGetFeatureValue(CommonUsages.secondaryButton, out newSecondary) 总是返回 false。这只是给我一个意想不到的问题的主要按钮。

现在根据统一 ( https://docs.unity3d.com/Manual/xr_input.html ),支持 Vive 的主按钮。

有谁知道为什么上述实现无法识别 Vive 的主按钮被按下?另外,有没有什么方法可以用统一的 OpenXR 检测 Vive 播放器的菜单按钮?上面的链接说不支持菜单按钮,但是有一个额外的按钮可以使用会很有用。

先感谢您!

4

1 回答 1

0

该问题通过转换为统一的新的基于动作的输入系统得到解决。

于 2021-11-24T07:50:30.177 回答