XR交互工具包-使用XRRayInteractior在UI元素上悬停事件



我正试图用XR交互工具包在Oculus Quest上制作一款VR游戏,我想在用户悬停UI元素时配置一个触觉事件。问题是,当我用XRRayInteractior悬停XRGrabInteractable或TeleportationArea,但不在画布上时,触觉事件会起作用。即使是简单的悬停事件(图片上的OnHoverUI(也无法在画布上工作。这真的很奇怪,因为我可以和UI元素(按钮、滑块…(交互

以下是我的XRRayInteractior的参数:XRRayInterator参数

我已经找到了一个没有这些参数的解决方案,但这真的很烦人。首先,我需要访问控制器(右手和左手(。然后,我为我想要触觉反馈的每个UI元素添加了一个"事件触发器"组件。这些触发器有一个"指针输入"事件,调用"OnHoverUI"函数。

void Start()
{
var inputDevices = new List<InputDevice>();
InputDevices.GetDevices(inputDevices);
foreach (var device in inputDevices)
{
if (device.role.ToString() == "LeftHanded")
{
leftHand = device;
}
else if (device.role.ToString() == "RightHanded")
{
rightHand = device;
}
}
}
public void OnHoverUI()
{
if (leftMenuMode) leftHand.SendHapticImpulse(0, 1f, 0.01f);
else if (rightMenuMode) rightHand.SendHapticImpulse(0, 1f, 0.01f);
}

我真的很想使用XRRayInteractior的参数,但它们不适用于UI。

有人知道为什么吗?

这是一个老问题,但我在尝试获得"XRInteractorRay是否有效;使用CCD_ 1。

首先在层次结构中创建两个空的GameObject,将它们重命名为";leftLineVisual";以及";rightLineVisual";并禁用两个GameObjects。在每个XRInteractorLineVisual脚本上(在每个XR控制器上(,将标线片设置为层次结构中的corrisponding GameObject。

然后,您可以使用XRInteractorLineVisual.reticle.activeInHierarchy(例如(获取XR射线的状态

[SerializeField] XRInteractorLineVisual leftLineVisual;
[SerializeField] XRInteractorLineVisual rightLineVisual;
void Update() {
if (rightLineVisual.reticle.activeInHierarchy || leftLineVisual.reticle.activeInHierarchy)
{
Debug.Log("One of the pointers is active");
}
else
{
Debug.Log("Both of the pointers are disabled");
}
}

最新更新