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