我创建了一个使用统一的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播放器的菜单按钮?上面的链接说菜单按钮是不支持的,但是有一个额外的按钮来工作将是有用的。
提前谢谢你!
发布于 2021-11-24 07:50:30
这个问题是通过转换成统一的新的基于行动的输入系统来解决的。
https://stackoverflow.com/questions/70084381
复制相似问题