using System; using UnityEngine; using UnityEngine.Events; using UnityEngine.EventSystems; public class MyButton : MonoBehaviour, IPointerClickHandler, IPointerEnterHandler, IPointerExitHandler { [SerializeField] private UnityEvent _onClick; // references [SerializeField] private OutlineFx.OutlineFx _outlineFx; [SerializeField] public bool isActive = true; private bool _isPointerOver = false; public void SetActive(bool active) { isActive = active; } private void OnEnable() { if (!TryGetComponent(out Collider2D _)) { Debug.LogError("MyButton needs a Collider2D to work", gameObject); } if (!_outlineFx) { _outlineFx = GetComponent(); } _outlineFx.enabled = false; } public void OnPointerClick(PointerEventData eventData) { if (isActive) _onClick.Invoke(); } public void OnPointerEnter(PointerEventData eventData) { _isPointerOver = true; } public void OnPointerExit(PointerEventData eventData) { _isPointerOver = false; } private void Update() { _outlineFx.enabled = _isPointerOver && isActive; } }