У меня есть карточка с иконками.На карте есть IPointerEnterHandler, она работает нормально и вызывается, когда мышь входит в объект.На карте есть скрытая кнопка, которая покрывает поверхность.
Проблема в том, что существуют некоторые вложенные объекты GameObject, для которых я хочу обнаруживать события IPointerEnterHandler.У меня есть слушатели IPointerEnterHandler на этих объектах, но они не срабатывают.
Если я удаляю их с карты, они будут срабатывать при зависании.Однако, находясь на карте, они не будут срабатывать.
Вот наглядный пример, а также иерархия и стрелки соответствуют значкам и их месту в иерархии:
Я пытался использовать EventSystem при вызове обновления, но currentSelectedObject всегда является картой (или, скорее, кнопкой карты, которая ее закрывает).
private void Update()
{
Debug.Log(EventSystem.current.currentSelectedGameObject);
if (EventSystem.current.currentSelectedGameObject == gameObject)
{
Debug.Log(1);
}
}
Знаете ли вы, как я могу обнаружить события наведения мыши на этих вложенных объектах (над которыми имеется элемент пользовательского интерфейса, который скрывает событие)?Я хотел бы избежать RayCasting, если это возможно.
Temp Решение:
Я прибегал к использованию Raycast в настоящее время.Я помещаю коллайдер на маленькую иконку и проверяю, попал ли он, когда мышь находится над картой:
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);
}
}
}
Я бы предпочел, чтобы иконка справилась с этой логикой, но пока это работает.Лучшие предложения приветствуются.
Обновление Вид компонента выглядит следующим образом: