直接上代码,动态给UGUI绑定事件的delagete工具类
using UnityEngine;
using UnityEngine.EventSystems;
using System;
/// <summary>
/// 事件监听类
/// 使用方法:UIEventListener.Get(gameObject).onScroll += OnScrollEvent;
/// </summary>
public class UIEventListener : EventTrigger
{
public Action<PointerEventData> onClick = null;
public Action<PointerEventData> onDoubleClick = null;
public Action<BaseEventData> onCancel = null;
public Action<PointerEventData> onDrag = null;
public Action<PointerEventData> onBeginDrag = null;
public Action<PointerEventData> onEndDrag = null;
public Action<PointerEventData> onDrop = null;
public Action<BaseEventData> onSubmit = null;
public Action<PointerEventData> onScroll = null;
public Action<BaseEventData> onSelect = null;
public Action<BaseEventData> onDeselect = null;
public Action<PointerEventData> onPointEnter = null;
public Action<PointerEventData> onPointExit = null;
public Action<PointerEventData> onPointUp = null;
public Action<PointerEventData> onPointDown = null;
public Action<AxisEventData> onMove = null;
/// <summary>
/// 添加事件监听
/// </summary>
/// <param name="go">被监听对象</param>
public static UIEventListener Get(GameObject go)
{
UIEventListener trigger = go.GetComponent<UIEventListener>();
if (trigger == null)
{
trigger = go.AddComponent<UIEventListener>();
}
return trigger;
}
/// <summary>
/// 使用 eventData.button 获取鼠标信息;
/// 使用 eventData.clickCount 获取点击次数;
/// </summary>
/// <param name="eventData"></param>
public override void OnPointerClick(PointerEventData eventData)
{
onClick?.Invoke(eventData);
if (onDoubleClick != null && eventData.clickCount == 2)
{
onDoubleClick(eventData);
}
}
public override void OnCancel(BaseEventData eventData)
{
onCancel?.Invoke(eventData);
}
public override void OnDrag(PointerEventData eventData)
{
onDrag?.Invoke(eventData);
}
public override void OnBeginDrag(PointerEventData eventData)
{
onBeginDrag?.Invoke(eventData);
}
public override void OnEndDrag(PointerEventData eventData)
{
onEndDrag?.Invoke(eventData);
}
public override void OnDrop(PointerEventData eventData)
{
onDrop?.Invoke(eventData);
}
public override void OnSubmit(BaseEventData eventData)
{
onSubmit?.Invoke(eventData);
}
public override void OnScroll(PointerEventData eventData)
{
onScroll?.Invoke(eventData);
}
public override void OnSelect(BaseEventData eventData)
{
onSelect?.Invoke(eventData);
}
public override void OnDeselect(BaseEventData eventData)
{
onDeselect?.Invoke(eventData);
}
public override void OnPointerEnter(PointerEventData eventData)
{
onPointEnter?.Invoke(eventData);
}
public override void OnPointerExit(PointerEventData eventData)
{
onPointExit?.Invoke(eventData);
}
public override void OnPointerUp(PointerEventData eventData)
{
onPointUp?.Invoke(eventData);
}
public override void OnPointerDown(PointerEventData eventData)
{
onPointDown?.Invoke(eventData);
}
public override void OnMove(AxisEventData eventData)
{
onMove?.Invoke(eventData);
}
}
程序学无止尽。
欢迎大家沟通,有啥不明确的,或者不对的,也可以和我私聊
我的QQ 334524067 神一般的狄狄