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 += _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(); this.SetActive(!m_DeActiveSelf); } break; case RespondType.Out: if (!RectTransformUtility.RectangleContainsScreenPoint(this.transform as RectTransform, sp, CameraManager.uiCamera)) { m_ClickOtherEvent.Invoke(); this.SetActive(!m_DeActiveSelf); } break; } } } public enum RespondType { In, Out, } }