| using System.Collections; | 
| using System.Collections.Generic; | 
| using UnityEngine; | 
| using UnityEngine.EventSystems; | 
| using System; | 
| using UnityEngine.Events; | 
|   | 
| [RequireComponent(typeof(RectTransform))] | 
| public class ClickScreenOtherSpace : MonoBehaviour | 
| { | 
|     [SerializeField] | 
|     bool m_DeActiveSelf = true; | 
|     public bool deActiveSelf { | 
|         get { return m_DeActiveSelf; } | 
|         set { m_DeActiveSelf = value; } | 
|     } | 
|   | 
|     [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)) | 
|                     { | 
|                         this.SetActive(!m_DeActiveSelf); | 
|                         m_ClickOtherEvent?.Invoke(); | 
|                     } | 
|                     break; | 
|                 case RespondType.Out: | 
|                     if (!RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera)) | 
|                     { | 
|                         this.SetActive(!m_DeActiveSelf); | 
|                         m_ClickOtherEvent?.Invoke(); | 
|                     } | 
|                     break; | 
|             } | 
|         } | 
|         else if (Input.GetMouseButtonUp(0)) | 
|         { | 
|             switch (m_RespondType) | 
|             { | 
|                 case RespondType.InOut: | 
|                     this.SetActive(!m_DeActiveSelf); | 
|                     m_ClickOtherEvent?.Invoke(); | 
|                     break; | 
|             } | 
|         } | 
|     } | 
|   | 
|     public enum RespondType | 
|     { | 
|         In, | 
|         Out, | 
|         InOut | 
|              | 
|     } | 
| } |