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