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