事件:
1、ClickEvent
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:ClickEvent
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:点击功能
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace LastZero.BaseEvent
{
public class ClickEvent : MonoBehaviour, IPointerClickHandler
{
public UnityEvent singleClick = new UnityEvent();
public UnityEvent doubleClick = new UnityEvent();
public UnityEvent rightClick = new UnityEvent();
public UnityEvent middleClick = new UnityEvent();
public void OnPointerClick(PointerEventData eventData)
{
if (eventData.clickCount == 1 && eventData.button == PointerEventData.InputButton.Left)
{
singleClick.Invoke();
}
else if (eventData.clickCount == 2 && eventData.button == PointerEventData.InputButton.Left)
{
doubleClick.Invoke();
}
else if (eventData.button == PointerEventData.InputButton.Right)
{
rightClick.Invoke();
}
else if (eventData.button == PointerEventData.InputButton.Middle)
{
middleClick.Invoke();
}
}
}
}
2、StayEvent
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:StayEvent
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:鼠标停留
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace LastZero.BaseEvent
{
public class StayEvent : MonoBehaviour, IPointerEnterHandler, IPointerExitHandler
{
public UnityEvent enterEvent = new UnityEvent();
public UnityEvent stayEvent = new UnityEvent();
public UnityEvent exitEvent = new UnityEvent();
private bool isStay;
public void OnPointerEnter(PointerEventData eventData)
{
isStay = true;
enterEvent.Invoke();
}
public void OnPointerExit(PointerEventData eventData)
{
isStay = false;
exitEvent.Invoke();
}
private void Update()
{
if (isStay)
stayEvent.Invoke();
}
}
}
3、RepeatEvent
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:RepeatEvent
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:鼠标长按
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace LastZero.BaseEvent
{
public class RepeatEvent : MonoBehaviour, IPointerDownHandler, IPointerUpHandler, IPointerExitHandler
{
public UnityEvent downEvent = new UnityEvent();
public UnityEvent repeatEvent = new UnityEvent();
public UnityEvent upEvent = new UnityEvent();
private bool isRepeating;
public void OnPointerDown(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
{
isRepeating = true;
downEvent.Invoke();
}
}
public void OnPointerExit(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
{
isRepeating = false;
}
}
public void OnPointerUp(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
{
isRepeating = false;
upEvent.Invoke();
}
}
private void Update()
{
if (isRepeating)
repeatEvent.Invoke();
}
}
}
4、DragEvent
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:DragEvent
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:拖拽功能
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using UnityEngine.EventSystems;
namespace LastZero.BaseEvent
{
public class DragEvent : MonoBehaviour, IBeginDragHandler, IDragHandler, IEndDragHandler
{
public UnityEvent beginDrag = new UnityEvent();
public UnityEvent drag = new UnityEvent();
public UnityEvent endDrag = new UnityEvent();
public void OnBeginDrag(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
beginDrag.Invoke();
}
public void OnDrag(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
drag.Invoke();
}
public void OnEndDrag(PointerEventData eventData)
{
if (eventData.button == PointerEventData.InputButton.Left)
endDrag.Invoke();
}
}
}
事件添加
1、ClickEventController
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:EventController
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:添加鼠标点击事件
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using LastZero.BaseEvent;
namespace LastZero.Event
{
public static partial class EventController
{
/// <summary>
/// 添加单击事件
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddSingleClickEvent(this GameObject target,UnityAction act)
{
if (target.GetComponent<ClickEvent>() == null)
target.AddComponent<ClickEvent>();
target.GetComponent<ClickEvent>().singleClick.AddListener(act);
}
/// <summary>
/// 添加双击事件
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddDoubleClickEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<ClickEvent>() == null)
target.AddComponent<ClickEvent>();
target.GetComponent<ClickEvent>().doubleClick.AddListener(act);
}
/// <summary>
/// 添加右击事件
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddRightClickEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<ClickEvent>() == null)
target.AddComponent<ClickEvent>();
target.GetComponent<ClickEvent>().rightClick.AddListener(act);
}
/// <summary>
/// 添加中键点击事件
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddMiddleClickEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<ClickEvent>() == null)
target.AddComponent<ClickEvent>();
target.GetComponent<ClickEvent>().middleClick.AddListener(act);
}
/// <summary>
/// 移除点击事件
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void RemoveClickEvent(this GameObject target)
{
if (target.GetComponent<ClickEvent>())
Object.Destroy(target.GetComponent<ClickEvent>());
}
}
}
2、StayEventController
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:EventController
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:添加鼠标停留事件
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using LastZero.BaseEvent;
namespace LastZero.Event
{
public static partial class EventController
{
/// <summary>
/// 添加鼠标进入功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddEnterEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<StayEvent>() == null)
target.AddComponent<StayEvent>();
target.GetComponent<StayEvent>().enterEvent.AddListener(act);
}
/// <summary>
/// 添加鼠标停留功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddStayEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<StayEvent>() == null)
target.AddComponent<StayEvent>();
target.GetComponent<StayEvent>().stayEvent.AddListener(act);
}
/// <summary>
/// 添加鼠标离开功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddExitEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<StayEvent>() == null)
target.AddComponent<StayEvent>();
target.GetComponent<StayEvent>().exitEvent.AddListener(act);
}
/// <summary>
/// 移除停留事件
/// </summary>
/// <param name="target">目标</param>
public static void RemoveStayEvent(this GameObject target)
{
if (target.GetComponent<StayEvent>())
Object.Destroy(target.GetComponent<StayEvent>());
}
}
}
3、RepeatEventController
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:EventController
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:添加鼠标长按事件
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using LastZero.BaseEvent;
namespace LastZero.Event
{
public static partial class EventController
{
/// <summary>
/// 添加按下功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddDownEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<RepeatEvent>() == null)
target.AddComponent<RepeatEvent>();
target.GetComponent<RepeatEvent>().downEvent.AddListener(act);
}
/// <summary>
/// 添加抬起功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddUpEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<RepeatEvent>() == null)
target.AddComponent<RepeatEvent>();
target.GetComponent<RepeatEvent>().upEvent.AddListener(act);
}
/// <summary>
/// 添加长按功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddRepeatEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<RepeatEvent>() == null)
target.AddComponent<RepeatEvent>();
target.GetComponent<RepeatEvent>().repeatEvent.AddListener(act);
}
/// <summary>
/// 移除长按事件
/// <param name="target">目标</param>
public static void RemoveRepeatEvent(this GameObject target)
{
if (target.GetComponent<RepeatEvent>())
Object.Destroy(target.GetComponent<RepeatEvent>());
}
}
}
4、DragEventController
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:EventController
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:添加鼠标拖拽事件
******************************************************************************/
using UnityEngine;
using UnityEngine.Events;
using LastZero.BaseEvent;
namespace LastZero.Event
{
public static partial class EventController
{
/// <summary>
/// 添加开始拖拽事件
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddBeginDragEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<DragEvent>() == null)
target.AddComponent<DragEvent>();
target.GetComponent<DragEvent>().beginDrag.AddListener(act);
}
/// <summary>
/// 添加拖拽功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddDragEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<DragEvent>() == null)
target.AddComponent<DragEvent>();
target.GetComponent<DragEvent>().drag.AddListener(act);
}
/// <summary>
/// 添加拖拽结束功能
/// </summary>
/// <param name="target">目标</param>
/// <param name="act">事件</param>
public static void AddEndDragEvent(this GameObject target, UnityAction act)
{
if (target.GetComponent<DragEvent>() == null)
target.AddComponent<DragEvent>();
target.GetComponent<DragEvent>().endDrag.AddListener(act);
}
/// <summary>
/// 移除拖拽事件
/// </summary>
/// <param name="target">目标</param>
public static void RemoveDragEvent(this GameObject target)
{
if (target.GetComponent<DragEvent>())
Object.Destroy(target.GetComponent<DragEvent>());
}
}
}
事件移除
/************************************************************
* 版本声明:v1.0.0
* 类 名 称:EventController
* 创建日期:11/13/2019 9:08:40 AM
* 作者名称:末零
* 功能描述:移除事件
******************************************************************************/
using System.Reflection;
namespace LastZero.Event
{
public partial class EventController
{
/// <summary>
/// 移除事件
/// </summary>
/// <param name="objectHasEvents">带有事件的物体</param>
/// <param name="eventName">事件名称</param>
public static void RemoveAllEvent(object objectHasEvents, string eventName = "")
{
EventInfo[] events = objectHasEvents.GetType().GetEvents(BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
for (int i = 0; i < events.Length; i++)
{
EventInfo ei = events[i];
if (eventName == "")
{
FieldInfo fi = events[i].DeclaringType.GetField(events[i].Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (fi != null)
{
fi.SetValue(objectHasEvents, null);
}
}
else if (ei.Name == eventName)
{
FieldInfo fi = events[i].DeclaringType.GetField(events[i].Name, BindingFlags.Public | BindingFlags.NonPublic | BindingFlags.Instance);
if (fi != null)
{
fi.SetValue(objectHasEvents, null);
}
break;
}
}
}
}
}
返回目录