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