[英]XR Interaction Toolkit - Hover event on UI Elements with XRRayInteractor
我正在尝试使用 XR 交互工具包在 Oculus Quest 上制作 VR 游戏,并且我想在用户悬停 UI 元素时配置一个触觉事件。 问题是当我使用 XRRayInteractor 悬停 XRGrabInteractable 或 TeleportationArea 但不在画布上时,触觉事件起作用。 即使是简单的悬停事件(图片上的 OnHoverUI)也无法在画布上运行。 这真的很奇怪,因为我可以与 UI 元素(按钮、滑块等)进行交互。
这是我的 XRRayInteractor 的参数: XRRayInteractor 参数
我已经找到了一个没有这些参数的解决方案,但这真的很烦人。 首先,我需要访问控制器(右手和左手)。 然后,我向每个我想要触觉反馈的 UI 元素添加了一个“事件触发器”组件。 这些触发器有一个调用“OnHoverUI”函数的“Pointer Enter”事件。
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);
}
我真的很想使用 XRRayInteractor 的参数,但它们不适用于 UI。
有人知道为什么吗?
一个老问题,但我在尝试使用XRInteractorLineVisual.reticle.activeInHierarchy
获得“XRInteractorRay 是否有效”时找到了一个简单的解决方法。
首先在层次结构中创建两个空的游戏对象,分别重命名为“leftLineVisual”和“rightLineVisual”,并禁用两个游戏对象。 在每个XRInteractorLineVisual
脚本上(在每个 XR 控制器上),将标线设置为层次结构中对应的 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");
}
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.