using UnityEngine; using System; //点击其他区域触发事件,无显隐逻辑 [RequireComponent(typeof(RectTransform))] public class ClickScreenOtherSpaceEvent : MonoBehaviour { [SerializeField] RespondType m_RespondType = RespondType.Out; public RespondType respondType { get { return m_RespondType; } set { m_RespondType = value; } } Action m_ClickOtherEvent; public void AddListener(Action _callBack) { m_ClickOtherEvent = null; m_ClickOtherEvent += _callBack; } public void RemoveAllListeners() { m_ClickOtherEvent = null; } private void LateUpdate() { if (Input.GetMouseButtonDown(0)) { var sp = Input.mousePosition; switch (m_RespondType) { case RespondType.In: if (RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera)) { m_ClickOtherEvent?.Invoke(); } break; case RespondType.Out: if (!RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera)) { m_ClickOtherEvent?.Invoke(); } break; } } } public enum RespondType { In, Out, } }