我有一张卡片,上面有一些图标。该卡上有一个 IPointerEnterHandler ,它工作正常,当鼠标进入对象时被调用。该卡有一个隐藏的按钮,覆盖表面。
问题是,有一些嵌套的游戏对象我想检测 IPointerEnterHandler 事件。我在这些对象上有 IPointerEnterHandler 侦听器,但它们不会触发。
如果我将它们从卡中移除,它们会在悬停时发射。但是,在卡上时,它们不会开火。
这是一个视觉示例,层次结构和箭头对应于图标及其在层次结构中的位置:
我尝试在 Update 调用中使用 EventSystem,但 currentSelectedObject 始终是卡片(或者更确切地说是覆盖它的卡片按钮)。
private void Update()
{
Debug.Log(EventSystem.current.currentSelectedGameObject);
if (EventSystem.current.currentSelectedGameObject == gameObject)
{
Debug.Log(1);
}
}
你知道我如何检测这些嵌套对象(它们上方有一个 UI 元素占用事件)上的鼠标悬停事件吗?如果可能的话,我想避免使用 RayCasting。
临时解决方案:
我暂时使用了光线投射。我在小图标上放了一个对撞机,并在鼠标悬停在卡片上时检查它是否击中:
private void Update()
{
if (!_mouseIsOver)
{
HideActionOrPerk();
return;
}
// If it's already showing a card then dont bother checking to show again
if (_shownCardClone != null) return;
Ray ray = Camera.main.ScreenPointToRay(Input.mousePosition);
RaycastHit[] hits = Physics.RaycastAll(ray, 100.0f);
Debug.Log(hits);
foreach(RaycastHit hit in hits)
{
S_ActionOrPerkIcon icon = hit.transform.GetComponent<S_ActionOrPerkIcon>();
if (icon != null)
{
ShowActionOrPerk(icon.tooltipCardGO);
}
}
}
我本来希望图标来处理这个逻辑,但这暂时有效。欢迎提出更好的建议。