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