using System; using UnityEngine; using UnityEngine.EventSystems; namespace Studio { public class MouseObserver : MonoBehaviour { public Action onMouseExitClick; public bool isPointerOverSelf; private RectTransform rectTransform; private bool prevPointerOverSelf = false; private void Awake() { rectTransform = GetComponent(); } private void Update() { if (rectTransform == null) return; // ¸¶¿ì½º°¡ ÀÚ½ÅÀÇ UI(RectTransform) ¿µ¿ª À§¿¡ ÀÖ´ÂÁö ÆÇº° bool isOver = RectTransformUtility.RectangleContainsScreenPoint( rectTransform, Input.mousePosition, GetEventCamera() ); if (isOver && !prevPointerOverSelf) { isPointerOverSelf = true; } else if (!isOver && prevPointerOverSelf) { isPointerOverSelf = false; } prevPointerOverSelf = isOver; if (Input.GetMouseButtonDown(0) && !isPointerOverSelf) { onMouseExitClick?.Invoke(); } } // UI¿ë Ä«¸Þ¶ó ¹Ýȯ (¾øÀ¸¸é null) private Camera GetEventCamera() { if (EventSystem.current != null && EventSystem.current.currentInputModule is StandaloneInputModule sim) { return sim.inputOverride?.mousePresent == true ? Camera.main : null; } return Camera.main; } } }