| 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, | 
|              | 
|     } | 
| } |