What's the most reliable way to check if the mouse is on an element?

I’m currently using OnPointerEnter and OnPointerExit with mixed results. I would like to know if there’s a function similar to OnColliderStay but for the mouse + ui elements. I don’t plan on calling this every frame just once in awhile.

Overload unity’s input module. Make pointer data public. Get object out of it

using System.Collections.Generic;

namespace UnityEngine.EventSystems {
    public class MyInputModule : StandaloneInputModule {
        public Dictionary<int, PointerEventData> pointerData =>
            m_PointerData;
    }
}

Here is a tooltip I did. It uses the event system

EventTriggerType.PointerEnter and Exit


public class ToolTipTarget : MonoBehaviour
    {
        [TextArea(3, 10)][SerializeField]private string text;

        public string Text => text;
        private Canvas canvas;
        public string Title { get; private set; }

        void Awake()
        {
            var trigger = gameObject.AddComponent<EventTrigger>();
            CreateTrigger(trigger, EventTriggerType.PointerEnter, Show);
            CreateTrigger(trigger, EventTriggerType.PointerExit, Hide);
            Title = GetComponentInChildren<Text>().text;
        }

        void Start()
        {
            canvas = GetComponentInParent<Canvas>();
        }

        private void CreateTrigger(EventTrigger trigger, EventTriggerType type, UnityAction<BaseEventData> handler)
        {
            var et = new EventTrigger.Entry { eventID = type };
            et.callback.AddListener(handler);
            trigger.triggers.Add(et);
        }

        private void Show(BaseEventData e)
        {
            var pe = (PointerEventData)e;
            Tooltip.GetToolTip(canvas).Show(this, pe);
        }

        private void Hide(BaseEventData _)
        {
            Tooltip.GetToolTip(canvas).Hide();
        }
    }
1 Like