我创建了一个使用 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 播放器的菜单按钮?上面的链接说不支持菜单按钮,但是有一个额外的按钮可以使用会很有用。
先感谢您!